0

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

表:

  • 警报
  • AlertGroups(与警报的一对多关系)
  • 收件人
  • RecipientGroups(与收件人的多对多关系)

我不想制作 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:已定义具有架构“dbo”和表“AlertRecipients”的实体集“AlertGroupRecipient”。每个 EntitySet 必须引用一个唯一的模式和表。

有没有一种解决方法可以做我想做的事情?

4

1 回答 1

0

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

于 2013-02-12T09:52:14.057 回答