Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework EntityFramework联接表包含2个以上的实体_Entity Framework_Entity Framework 5 - Fatal编程技术网

Entity framework EntityFramework联接表包含2个以上的实体

Entity framework EntityFramework联接表包含2个以上的实体,entity-framework,entity-framework-5,Entity Framework,Entity Framework 5,我有4个表/实体,分为两组:警报和收件人。一个组中的任何一个实体都可以映射到另一个组中的任何一个实体(警报可以有多个收件人和收件人组等) 表: 警报 警报组(与警报的1对多关系) 接受者 接收方组(与接收方的多对多关系) 与创建4个联接表(AlertRecipients、AlertRecipientGroups等)不同,我希望创建一个包含4列的联接表,每列都是我的一种实体类型的可为null的FK 我用SQL创建了表,并使用Fluent API设置了上下文,如下所示: modelBuilder

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

表:

  • 警报
  • 警报组(与警报的1对多关系)
  • 接受者
  • 接收方组(与接收方的多对多关系)
与创建4个联接表(AlertRecipients、AlertRecipientGroups等)不同,我希望创建一个包含4列的联接表,每列都是我的一种实体类型的可为null的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"));
modelBuilder.Entity()
.HasMany(ag=>ag.recipientGroup)
.WithMany(rg=>rg.AlertGroups)
.Map(m=>m.ToTable(“AlertRecipients”)
.MapLeftKey(“AlertGroupID”)
.MapRightKey(“RecipientGroupID”);
modelBuilder.Entity()
.HasMany(ag=>ag.Recipients)
.WithMany(rg=>rg.AlertGroups)
.Map(m=>m.ToTable(“AlertRecipients”)
.MapLeftKey(“AlertGroupID”)
.MapRightKey(“收件人ID”);
但我得到了这个错误:

指定的架构无效。错误:

(251,6):错误0019:具有架构的EntitySet“AlertGroupRecipient” 已定义“dbo”和表“AlertRecipients”。每个实体集 必须引用唯一的架构和表


我想做的事情有解决办法吗?

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

只是一个猜测。。我认为
警报组
包含
警报
,等等。?您不能将关联仅限于一个多对多关联
警报组
-
接收者组
,其中一个具有1个成员的组充当单一表单吗?(可能有一些特殊的业务逻辑)。具有可为空FKs的连接表不是一个好的构造,只有少数允许的列组合的连接表是不规范的,并且容易出错。最后,也许最好的选择是4个连接表。@GertArnold我知道它不是标准化的,但是4个连接表看起来很笨拙。另外,我还有一组关系,两个实体中的任何一个映射到任意或3个实体(现在有6个连接表),我想把它们都推到一个表中。我理解你的反对意见。这些连接台有时也让我发疯。尽管如此,我还是喜欢简洁的数据库模型,一个表对应一个关联。数据模型非常基础,以后很难更改。任何妥协都会困扰你很多年(我知道,我有一些)。