Сценарий
У меня есть модель со следующими настройками:
Участник может быть членом нескольких списков участников. Список участников может иметь несколько участников. Я также определил, что список участников может иметь отдельный набор дополнительных членов. По сути, у меня двойные отношения между членом и участником. Более того, список участников всегда принадлежит одному участнику, который создал список участников.
Задача
Платформа Entity Framework Code First не может правильно отобразить эти отношения, даже если я расскажу им, как отобразить отношения. Я получаю следующую ошибку при попытке использовать 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 с первым кодом? И если да, то как лучше всего решить проблему с отображением, с которой я столкнулся?
Я всегда могу изменить модель, чтобы она содержала сущность Членство, которая связывает члена с списком участников. Это делает все это немного более явным, и я могу добавить свойство к этому объекту, чтобы пометить его как необязательное.
Я думаю, однако, что это сценарий, который должен был сработать, поэтому я надеюсь, что кто-то делал это раньше и знает, в чем заключается хитрость, чтобы заставить его работать правильно.