原项目:
EF4.1, codefirst
用VS2010开发
升级后:
EF5.0,
VS2012, .net4.5
步骤:
1. 当然是替换所有的dll。直接安装EF5.0即可http://blogs.msdn.com/b/adonet/archive/2012/05/15/ef5-release-candidate-available-on-nuget.aspx 利用NuGet工具包
2. 修改一些名称:DbDatabase->Database; ModelBuilder->DbModelBuilder
3. 比较关键的一个地方:EF5.0 对于外键的处理会有变化。表现在如果在OnModelCreating方法中如果没有准确定义附属表对于主表删除时的动作响应,则会创建出多余外键。
比如:一个Patient有多个Case,那么在Patient里有个virtual的Case的collection,Case里有个Virtual的Patient。如果想定义删除Patient也同时删除所有的Case,那么需要这么写:
modelBuilder.Entity<Patient>().HasMany(p => p.Cases).WithRequired(x=>x.ParentPatient).WillCascadeOnDelete();
一定要指明是利用哪个外键关系删除。如果只写成
modelBuilder.Entity<Patient>().HasMany(p => p.Cases).WithRequired().WillCascadeOnDelete();
那么创建出来的Case表带有两个外键:一个是由于Patient里面的Case的collection搞出来的默认的Patient_ID, 另一个是ParentPatient_ID。
如果不想定义这个WillCascadeOnDelete,那么干脆不写,这样也不会创建出多余的外键
4. 不要惊讶,外键名称可读性更好了。这点在EF4.3中就有体现。EF4.1简直太烂了。
5. 再想回去是不可能了,总是出现断言失败,即使卸载EF5.0也不行
6. 支持sp,和SQL2012的localdb, 而且据说性能上有很大优化,拭目以待