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

本文关键字:同类型 关系 框架 fluentapi 实体 | 更新日期: 2023-09-27 18:13:40

我有一个类,它有两个可选字段"TeamOne"类型为"Team"和"TeamTwo"类型为"Team"。显然,团队可以在不被分配到游戏的情况下存在,并且在游戏被删除时不应被删除,反之亦然。

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

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

我遇到了错误

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

我在这里做错了什么吗?

编辑:1场比赛:1队一和1队二第一队和第二队最多分配1场比赛

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

您正在尝试创建两个具有一个反向端的关系。Game.TeamOneGame.TeamTwo都与Team.Game有关。但是,当来自Team时,Team.Game应该指的是哪个Game?它TeamOne的那个,还是TeamTwo?那里有一种模棱两可的地方。您需要类型为 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)

HomeGamesAwayGames public (virtual) ICollection<Game>的地方.