【发布时间】:2014-06-03 22:06:02
【问题描述】:
我正在尝试使用 Entity Framework 6 实现层次结构,但在超过父子关系的第一级时遇到了问题。我正在尝试做的一个例子如下:
[Table("TestParent", Schema = "dbo")]
public class TestParent {
[Key, Column(Order = 1), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public virtual int TestParentId { get; set; }
private ICollection<TestChild> _testChildren;
public virtual ICollection<TestChild> TestChildren {
get { return _testChildren ?? (_testChildren = new HashSet<TestChild>()); }
set { _testChildren = value; }
}
}
[Table("TestChild", Schema = "dbo")]
public class TestChild {
[Key, Column(Order = 1), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public virtual int TestId { get; set; }
[Key, ForeignKey("TestParent"), Column(Order = 2)]
public int TestParentId { get; set; }
public virtual TestParent TestParent { get; set; }
private ICollection<TestGrandChild> _testGrandChildren;
public virtual ICollection<TestGrandChild> TestGrandChildren {
get { return _testGrandChildren ?? (_testGrandChildren = new HashSet<TestGrandChild>()); }
set { _testGrandChildren = value; }
}
}
[Table("TestGrandChild", Schema = "dbo")]
public class TestGrandChild {
[Key, Column(Order = 1), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public virtual int TestGrandChildId { get; set; }
[Key, Column(Order = 2)]
public int TestChildId { get; set; }
public virtual TestChild Test { get; set; }
}
由于某种原因,EF 无法识别 TestGrandChild.TestChildId 是 TestChild.TestChildId 的外键。如果我像这样强迫它:
[Table("TestGrandChild", Schema = "dbo")]
public class TestGrandChild {
[Key, Column(Order = 1), DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public virtual int TestGrandChildId { get; set; }
[Key, ForeignKey("TestChild"), Column(Order = 2)]
public int TestChildId { get; set; }
public virtual TestChild Test { get; set; }
}
我收到以下错误:
System.Reflection.TargetInvocationException:调用的目标已抛出异常。 ---> System.Data.Entity.ModelConfiguration.ModelValidationException:在模型生成过程中检测到一个或多个验证错误: TestGrandChild_TestChild_Target_TestGrandChild_TestChild_Source: : 关系约束中的从属角色和主体角色中的属性数量必须相同。
让我发疯!!!!
【问题讨论】:
标签: c# entity-framework collections parent-child hierarchy