3

基本上我想要实现的是我有三个表,一个父级将始终在其中有一个条目,并且只会填充另外两个表中的一个。我正在处理的复杂性是表的主键是两个字段的组合

ParentTable
-----------
UniqueID
OwnerID
[Some more fields]


ChildTable1
-----------
UniqueID
OwnerID
[Some more fields]


ChildTable2
-----------
UniqueID
OwnerID
[Some more fields]

我想知道是否有人对如何通过 EF Code First 最好使用 Fluent API 最好地做到这一点有任何建议。

4

1 回答 1

7

您只需要定义主键是复合...

modelBuilder.Entity<Parent>().HasKey(p => new { p.UniqueID, p.OwnerID });
modelBuilder.Entity<Child1>().HasKey(c => new { c.UniqueID, c.OwnerID });
modelBuilder.Entity<Child2>().HasKey(c => new { c.UniqueID, c.OwnerID });

...然后定义两个一对一的关系:

modelBuilder.Entity<Parent>()
    .HasOptional(p => p.Child1)
    .WithRequired(); // or .WithRequired(c => c.Parent)

modelBuilder.Entity<Parent>()
    .HasOptional(p => p.Child2)
    .WithRequired(); // or .WithRequired(c => c.Parent)

但是,您不能定义约束(可能通过在数据库中定义触发器除外)以确保给定的父级只能引用两个子级之一,但不能同时引用这两个子级。您必须在应用程序的业务逻辑中处理此限制。

于 2012-11-06T15:49:36.980 回答