我正在使用EF7,我有三个实体:
class A {
public int Id;
public B B;
}
class B {
public int Id;
public string SomeValue;
public virtual IEnumerable<C> C;
}
public class C {
public int Id;
public string SomeValue;
public virtual B B;
}
自动生成的迁移似乎很好,并且从C到B添加了外键。 但是,当我执行以下操作时,没有为数据库中的外键分配值:
var a = _dbContext.A.Single(x => x.Id == id);
a.B = new B {
SomeValue = "SomeValue";
C = listOfC;
};
_dbContext.SaveChanges();
C的实际值存储在相应的表中,但由于未保存外键,我无法再根据B检索它。
EF7无法正确执行嵌套插入吗?有办法解决这个问题吗?
修改 显式声明外键使其不可为空,这意味着插入失败(“错误的外键约束”)。
答案 0 :(得分:0)
将B中的IEnumerable更改为ICollection可解决此问题:
class B {
public int Id;
public string SomeValue;
public virtual ICollection<C> C;
}