EntityFramework连接具有2个以上实体的表

时间:2013-02-11 20:46:27

标签: entity-framework entity-framework-5

我有4个表/实体,分为两组,警报和收件人。组中的任一实体都可以映射到另一个组的任一实体(警报可以包含许多收件人和收件人组等)。

表:

  • 警报
  • AlertGroups(与警报的1对多关系)
  • 收件人
  • 收件人组(与收件人的多对多关系)

我没有制作4个连接表(AlertRecipients,AlertRecipientGroups等),而是想制作一个包含4列的连接表,每列对于我的一个实体类型都是可空的FK。

我在SQL中创建了表,并使用Fluent API设置我的上下文,如下所示:

modelBuilder.Entity<AlertGroup>()
                .HasMany(ag => ag.RecipientGroups)
                .WithMany(rg => rg.AlertGroups)
                .Map(m => m.ToTable("AlertRecipients")
                    .MapLeftKey("AlertGroupID")
                    .MapRightKey("RecipientGroupID"));

            modelBuilder.Entity<AlertGroup>()
                .HasMany(ag => ag.Recipients)
                .WithMany(rg => rg.AlertGroups)
                .Map(m => m.ToTable("AlertRecipients")
                    .MapLeftKey("AlertGroupID")
                    .MapRightKey("RecipientID"));

但是我收到了这个错误:

  

指定的架构无效。错误:

     

(251,6):错误0019:具有架构的EntitySet“AlertGroupRecipient”   'dbo'和表'AlertRecipients'已经定义。每个EntitySet   必须引用一个独特的架构和表格。

是否有解决方法来做我正在尝试做的事情?

1 个答案:

答案 0 :(得分:0)

EF无法以这种方式做到这一点。使用EF,您需要为每个多对多关系提供单独的连接表(因为这是您应该这样做的方式)。如果您想以自己的方式执行此操作,则无法在映射中使用多对多关联。您必须将AlertRecipients“升级”为真实实体(模型中的另一个类)并处理一对多关联等所有内容。