2017-03-01 82 views
0

我使用EF7,我有三个实体: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; 
} 

自动生成的迁移似乎罚款,以及一个外键从下加入B. 然而,当我这样做,没有值被分配给数据库中的外键:

var a = _dbContext.A.Single(x => x.Id == id); 
a.B = new B { 
    SomeValue = "SomeValue"; 
    C = listOfC; 
}; 
_dbContext.SaveChanges(); 

C的实际值存储在相应的表格,但随着外键不保存我再也无法找回相对于B.

EF7无法正确执行嵌套插入?有什么办法可以解决这个问题吗?

编辑: 显式声明外键使其不能为空,这意味着插入失败(“坏外键约束”)。

+1

请更新您的例子包括类的实际性能,从你的定义没有ID定义,也无法为外键的值Id, –

+0

对不起。你是没有这个实体的外键的属性--EF自动生成这个。我曾尝试明确地在实体中声明它,但是这绝对没有改变。 – severin

+0

好吧,这不是绝对正确的,显式声明外键使其不能为空,这意味着插入失败,因为数据库抱怨外键的缺失值。 – severin

回答

0

改变了IEnumerable在B到ICollection的解决问题:

class B { 
    public int Id; 
    public string SomeValue; 
    public virtual ICollection<C> C; 
}