entity framework通过包含对象,多对多

我很好奇是否可以通过包含对象映射中间表。

public class Subscriber : IEntity { [Key] public int Id { get; set; } public string Name { get; set; } private ChannelList _subscribedList { get; set; } public int NumSubscribedChannels { get { return _subscribedList.Count(); } } } public class HelpChannel : IEntity { [Key] public int Id { get; set; } public string name { get; set; } public string category { get; set; } public int group { get; set; } } 

我需要有一个订户表,频道表和一个中间表来将订户链接到他/她的频道。

是否可以将ChannelList对象中的列表映射到订阅服务器模型?

我想这可能是不可能的,我需要有一个私人列表供EF映射。 但我不确定EF是否会为私有变量做到这一点。 会吗?

我希望这样做是因为如果必须公开来维护封装。

您可以先在EF代码中映射私有属性。 这是一个很好的描述如何做到这一点。 在您的情况下,它是关于Subscriber._subscribedList的映射。 你不能做的是(在上下文中覆盖OnModelCreating ):

 modelBuilder.Entity().HasMany(x => x._subscribedList); 

它不会编译,因为_subscribedList是私有的。

您可以做的是在Subscriber创建一个嵌套的映射类:

 public class Subscriber : IEntity { ... private ICollection _subscribedList { get; set; } // ICollection! public class SubscriberMapper : EntityTypeConfiguration { public SubscriberMapper() { HasMany(s => s._subscribedList); } } } 

并在OnModelCreating

 modelBuilder.Configurations.Add(new Subscriber.SubscriberMapping()); 

您可能希望使_subscribedList保护虚拟,以允许延迟加载。 但是甚至可以使用Include进行急切加载:

 context.Subscribers.Include("_subscribedList");