我有4个表/实体,分为两组,警报和收件人。组中的任一实体都可以映射到另一个组的任一实体(警报可以包含许多收件人和收件人组等)。
表:
我没有制作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 必须引用一个独特的架构和表格。
是否有解决方法来做我正在尝试做的事情?
答案 0 :(得分:0)
EF无法以这种方式做到这一点。使用EF,您需要为每个多对多关系提供单独的连接表(因为这是您应该这样做的方式)。如果您想以自己的方式执行此操作,则无法在映射中使用多对多关联。您必须将AlertRecipients
“升级”为真实实体(模型中的另一个类)并处理一对多关联等所有内容。