代码改变世界

linq to sql =>; ADO.NET Entity Framework

2008-08-13 21:33  无常  阅读(2246)  评论(5编辑  收藏  举报

花了一天的时间把项目从linq2sql转到ADO.NET Entity Framework。

此项目bs部分工程量不算多,复杂的功能都做在cs部分上,bs只负责基础数据的维护和报表统计,

其实用linq2sql也可以满足了,但是linq2sql designer用得实在太不爽了,表少的时候还能应付,现在表增加到70几个了,找个表得找半天,linq2sql desinger也不提供个搜索功能:(

前天装好vs2008sp1,试了一下EF designer,增加了Overview窗口和Model browser,就为了这个也要换到EF

image

转换过程还算顺利,

1.把代码中linq2sql的DataContext换成EF的ObjectContext,这步可以用find/replace完成大部分工作

2.linq2sql创建新记录时是用DataContext.表名s.InsertOnSubmint(obj),而ef是ObjectContext.AddTo表名(object),提交变更也从DataContext.SubmitChange()改成Object.SaveChanges()

3. DataContext.表名s  =>  ObjectContext.表名,这部分可以replace完成

4.aspx文件中用到的LinqDataSource全部得换成EntitiDataSource,这里只有手工一个一个替换了,没法偷懒。LinqDataSource的查询条件需要手工换成Entity SQL,这部分工作是大头~ 还得学一下Entity SQL

5.如果linq2sql代码用到[].Contains(xx)运算的,参考一下这里的方法解决

6.如果linq2sql中访问数据库时有嵌套访问数据库的,如下面这段代码,在linq2sql中没问题。

image

如果按流程转到EF的话,就会遇到异常

image

image

这是因为EF中foreach读取数据时是采用DataReader在线读取方式,而linq2sql则是采取类似DataSet的先把所有数据从数据库中取出到内存的方式,

所以在EF中需要把外层循环改成

foreach (var depart in ctx.Department.ToList() )

 

转移工作基本就这些了

接下来要实下EntitySQL了~