实体框架与 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场比赛
您正在尝试创建两个具有一个反向端的关系。Game.TeamOne
和Game.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)
。HomeGames
和AwayGames
public (virtual) ICollection<Game>
的地方.