EF 4.* Code First 遇到的问题汇总(一)
问题一:”定义共用值的一对一关系映射”
类结构如下:
public class A { public int AID { get; set; } public string Title { get; set; } public B B { get; set; } } public class B { public int AID { get; set; } public string Body { get; set; } }
解决方法:
FluentAPI:
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity().HasKey(b => b.AID); modelBuilder.Entity().HasRequired(a => a.B).WithRequiredPrincipal(); }
OnModelCreating 方法在DbContext中定义的。
问题二:”在查询时只加载了主类的值,附属类没有加载。”
描述:在查询时A时,结果A.B属性没有加载相应的值。
解决方法:
采用Include 来进行强制加载如:
ef.Set<A>().Include(a => a.B)
问题一、二参考:http://www.cnblogs.com/dudu/archive/2012/01/05/entity_framework_one_to_one_shared_primary_key.html
问题三:”违反了引用完整性约束: 在此关系的主对象和依赖对象之间,定义引用约束的属性值不一致。”
描述:我通过实例A修改B中的类型然后出现改错误,如:A.B.Body = “TEST”;
问题原因:是因为A.B的实例中AID的值为“0”
解决方法:将A.B的实例的AID的值附成A.AID的值。
问题四:”如果想将A和B的内容修改后同时保存,结果B没有保存成功“
问题原因:是因为A.B的实例EntityState没有修改造成的。
解决方法:
db.Entry(A.B).State = EntityState.Modified;
db.Entry(A).State = EntityState.Modified;
注:db是继承自DbContext的实例。
作者:
吉桂昕
出处: http://www.cnblogs.com/jiguixin
我的新浪微博: http://weibo.com/jiguixin
本文版权归【吉桂昕】和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。
出处: http://www.cnblogs.com/jiguixin
我的新浪微博: http://weibo.com/jiguixin
本文版权归【吉桂昕】和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】,希望能够持续的为大家带来好的技术文章!想跟我一起进步么?那就【关注】我吧。