Wil*_*nts 4 .net c# entity-framework ef-code-first entity-framework-4.1
我有一个具有以下设置的模型:
成员可以是多个成员列表的成员.成员列表可以有多个成员.我还定义了一个成员列表可以有一组单独的可选成员.基本上我在成员和成员列表之间有一个双nm关系.更重要的是,成员列表始终由成员拥有,成员是创建成员列表的成员.
实体框架代码优先无法正确映射此关系,尽管我告诉它如何映射关系.我第一次尝试使用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).
Run Code Online (Sandbox Code Playgroud)
在场景中首次尝试使用该模型失败,因为很明显EF不知道如何映射nm关系.所以我明确地告诉框架如何解决这个问题.
// 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);
Run Code Online (Sandbox Code Playgroud)
这种情况是否可以使用Entity framework 4.1代码优先?如果是这样,那么解决我遇到的映射问题的最佳方法是什么?
我总是可以更改模型,以便它具有将成员链接到成员列表的成员实体.它使整个事情更加明确,然后我可以向该实体添加属性以将其标记为可选.
不过我认为这是一个应该有效的方案,所以我希望之前有人这样做,并知道让它正常工作的诀窍.
你的所有映射都包含.WithMany(member => member.MemberLists).那是不对的.每个关系都需要单独的导航属性=您只能将每个导航属性用于一个关系映射.
| 归档时间: |
|
| 查看次数: |
6433 次 |
| 最近记录: |