2014-08-28 146 views
0

我目前有一个EF上下文。在我的数据库模式中,我有以下情况。实体框架 - 外键映射 - 模型绑定

两个表,表A表B和

表被定义如下:

TableA (A_ID, name, description) 
TableB (B_ID, C_ID, name, description) 

表A表B和之间的关系是这样的,B_ID和C_ID都FK对A_ID。

如何通过设置我的ModelBinder(Fluent API)或注释来实现EF中的这种行为。提前致谢。

+0

我没有使用Int's,而是使用了GUID作为我的PK。如果这仍然是你认为的问题? – nav 2014-08-28 07:30:07

+0

GUIDs也应该工作:) – Marthijn 2014-08-28 07:52:56

回答

2

我有解决方案,但前提是您只需在TableB实体中添加TableA虚拟道具来修改您的实体。 例子:

public class TableB 
{ 
... 
public virtual TableA B { get; set; } 
public virtual TableA C { get; set; } 
... 
} 

然后覆盖在上下文中 “OnModelCreating”(你可以使用 “HasOptional”,而不是 “HasRequired”):

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Entity<TableB>() 
       .HasRequired(x => x.B) 
       .WithMany() 
       .HasForeignKey(x => x.B_ID).WillCascadeOnDelete(false); 

      modelBuilder.Entity<TableB>() 
       .HasRequired(x => x.C) 
       .WithMany() 
       .HasForeignKey(x => x.C_ID).WillCascadeOnDelete(false); 

      base.OnModelCreating(modelBuilder); 
     } 

还有一件事。我不知道如何使用我的解决方案为您的“B_ID”主键。在我的项目中,我有一个不同的PK“Id”。

+0

谢谢。这种方法对我来说效果很好。 – nav 2014-08-29 22:36:18