实体框架与fluentapi相同类型的多个可选关系

时间:2016-10-18 17:26:30

标签: c# entity-framework linq

我有一个有两个可选字段的课程" TeamOne"类型"团队"和#34; TeamTwo"类型"团队"。 团队显然可以存在而不会被分配给游戏,并且在游戏被删除时不会被删除,反之亦然。

现在我正试图以这种方式设置关系:

HasOptional(x => x.TeamOne).WithOptionalDependent(x => x.Game).WillCascadeOnDelete(false);
HasOptional(x => x.TeamTwo).WithOptionalDependent(x => x.Game).WillCascadeOnDelete(false);

我遇到了错误

  

指定的架构无效。错误:关系' Infrastructure.DAL.Match_TeamOne'未加载,因为类型' Infrastructure.DAL.Team'不可用。

我在这里做错了吗?

编辑: 1场比赛:1场TeamOne和1场TeamTwo TeamOne和TeamTwo被分配到1个游戏最大

1 个答案:

答案 0 :(得分:2)

您尝试使用一个反向结束创建两个关系。 Game.TeamOneGame.TeamTwo都与Team.Game相关。但是,来自Team时,Game应该Team.Game提到哪个?它是TeamOneTeamTwo的那个?那里有一种模棱两可的含义。您需要第Game类型的第二个属性才能与TeamTwo绑定。这可行:

HasOptional(x => x.TeamOne).WithOptionalDependent(x => x.HomeGame).WillCascadeOnDelete(false);
HasOptional(x => x.TeamTwo).WithOptionalDependent(x => x.AwayGame).WillCascadeOnDelete(false);

但我不认为这种模式是对的。一个团队真的只有一个Game吗?这是一个有趣的比赛模式!我认为球队可以参加很多比赛。游戏,映射应如下所示:

HasOptional(x => x.TeamOne).WithMany(x => x.HomeGames)
                  .WillCascadeOnDelete(false)
HasOptional(x => x.TeamTwo).WithMany(x => x.AwayGames)
                  .WillCascadeOnDelete(false)

...其中HomeGamesAwayGamespublic (virtual) ICollection<Game>