EF 4.* Code First 遇到的问题汇总(一)

问题一:”定义共用值的一对一关系映射”

描述:要实现的效果类型于image 此数据库表结果。

类结构如下:

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的实例。

原文地址:https://www.cnblogs.com/jiguixin/p/2998120.html