gpt4 book ai didi

c# - 使用 Entity Framework 代码优先映射多个关系的问题

转载 作者:太空狗 更新时间:2023-10-30 00:27:33 24 4
gpt4 key购买 nike

场景

我有一个具有以下设置的模型:

一个成员可以是多个成员列表的成员。一个成员列表可以有多个成员。我还定义了一个成员列表可以有一组单独的可选成员。基本上我在成员和成员列表之间有一个双 n-m 关系。更重要的是,成员列表始终由成员拥有,即创建成员列表的人。

问题

Entity Framework 代码优先无法正确映射此关系,即使我告诉它如何映射关系。第一次尝试使用 DbContext 时出现以下错误

Schema specified is not valid. Errors: 
(32,6) : error 0040: Type MemberList_Members is not defined in namespace NerdCooking.Models (Alias=Self).
(33,6) : error 0040: Type MemberList_OptionalMembers is not defined in namespace NerdCooking.Models (Alias=Self).

我尝试过的

在场景中使用该模型的第一次尝试失败了,因为很明显 EF 不知道如何映射 n-m 关系。所以我明确告诉框架如何解决这个问题。

// Map the relation between members of a memberlist and the memberlist
// to a Membership table
modelBuilder.Entity<MemberList>().HasMany(memberList => memberList.Members)
.WithMany(member => member.MemberLists)
.Map(mapping => mapping.MapLeftKey("MemberId")
.MapRightKey("MemberListId").ToTable("Membership"));

// Map the relation between optional members of a memberlist and the memberlist
// to a separate table
modelBuilder.Entity<MemberList>().HasMany(memberList => memberList.OptionalMembers)
.WithMany(member => member.MemberLists)
.Map(mapping => mapping.MapLeftKey("MemberId")
.MapRightKey("MemberListId").ToTable("OptionalMembership"));

// Map the relationship between the owner and the memberlist
modelBuilder.Entity<MemberList>().HasRequired(memberList => memberList.Owner)
.WithMany(member => member.MemberLists).WillCascadeOnDelete(true);

我的问题

Entity framework 4.1 code-first 可以实现这种场景吗?如果是这样,解决我遇到的映射问题的最佳方法是什么?

我总是可以更改模型,使其具有一个将成员链接到成员列表的成员资格实体。它使整个事情更加明确,然后我可以向该实体添加一个属性以将其标记为可选。

不过,我认为这是一个应该可行的方案,所以我希望以前有人这样做过,并且知道让它正常工作的诀窍是什么。

最佳答案

您的所有映射都包含 .WithMany(member => member.MemberLists)。那是不正确的。每个关系都需要单独的导航属性 = 您只能将每个导航属性用于一个关系映射。

关于c# - 使用 Entity Framework 代码优先映射多个关系的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6207848/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com