C# 实体框架具有fluentapi的相同类型的多个可选关系

C# 实体框架具有fluentapi的相同类型的多个可选关系,c#,entity-framework,linq,C#,Entity Framework,Linq,我有一个类,它有两个可选字段“TeamOne”类型为“Team”,而“TeamTwo”类型为“Team”。 很明显,团队可以在不参与游戏的情况下存在,并且在游戏被删除时不应被删除,反之亦然 现在,我尝试以这种方式设置关系: HasOptional(x => x.TeamOne).WithOptionalDependent(x => x.Game).WillCascadeOnDelete(false); HasOptional(x => x.TeamTwo).WithOption

我有一个类,它有两个可选字段“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”,因为类型“Infrastructure.DAL.Team”不可用

我做错什么了吗

编辑: 1场比赛:1队1和1队2
TeamOne和TeamTwo最多分配1个游戏

您试图创建两个具有一个反向端的关系。
Game.TeamOne
Game.TeamTwo
都与
Team.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);
但我认为这种模式是不对的。一支球队真的只有一场比赛吗?这是一个有趣的竞赛模式!我认为团队可以玩“许多”游戏,映射应该如下所示:

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

。。。如果
家庭游戏
AwayGames
公共(虚拟)ICollection

我认为您需要提供更多信息,目前没有太多内容。也许可以提供更多关于实际错误消息的上下文。从错误中,它表示未指定架构。不确定是否正在使用迁移,但可能尚未使用新架构更新数据库?我正在执行自动迁移。架构似乎是最新的。错误消息表示该类型不可用。这可能导致非公共属性(或没有正确的getter/setter)或程序集编译错误。可能您有旧的程序集,或者它没有迁移此表。在黑暗中拍摄,您是否也尝试过删除临时asp.net文件并重建?您可能还希望反编译程序集,并确保该类型存在。但从我看来,这是根本问题<代码>因为类型“Infrastructure.DAL.Team”不可用“请确保该类型存在、已加载且可用。当我删除其中一个HasOptional()时,它似乎正在工作。。。说明书所以“HasOptional(x=>x.TeamOne)。WithOptionalDependent(x=>x.Match)。WillCascadeOnDelete(false);”有效,但“HasOptional(x=>x.TeamOne)。WithOptionalDependent(x=>x.Match)。WillCascadeOnDelete(false);hasOptionaldependent(x=>x.Match)。WillCascadeOnDelete(false);”无效。我不确定接下来的步骤是什么。。有什么建议吗?是的,我刚刚注意到问题的症结所在。。。是的,一支球队一次只能参加一场比赛。当你想到“游戏”时,把它看成是一场比赛。比如德国队对英格兰队。德国不会一次打两场比赛。就我而言,没有主客场球队。从技术上讲,他们都是客场球队。我不想为同一类型的实体管理两个表。一定有办法的,一场一场,是的。但你不想每个队只储存一场比赛,是吗?无论如何,如果这样做,可以使用第一个映射并调整属性名称。或者使用您自己的映射,将一个
替换为optionaldependent
调用替换为一个空参数:
替换为optionaldependent()
。请注意,在此模型中,一个团队一次可以参加两场比赛,第一场比赛为
TeamOne
,第二场比赛为
TeamTwo