Pro*_*ger 14 c# asp.net-mvc 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; }
}
Run Code Online (Sandbox Code Playgroud)
我需要有一个订阅者表,频道表和一个中间表来将订阅者链接到他/她的频道.
是否可以将ChannelList对象中的列表映射到订阅者模型?
我认为这可能是不可能的,我需要有一个私人列表供EF映射.但我不确定EF是否会为私有变量做这件事.会吗?
我希望这样做是因为如果必须公开来维护封装.
Ger*_*old 36
您可以先在EF代码中映射私有属性.这是一个很好的描述如何做到这一点.在你的情况下,它是关于映射Subscriber._subscribedList.你不能做的是这个(在上下文的覆盖中OnModelCreating):
modelBuilder.Entity<Subscriber>().HasMany(x => x._subscribedList);
Run Code Online (Sandbox Code Playgroud)
它不会编译,因为它_subscribedList是私有的.
您可以做的是在以下位置创建嵌套映射类Subscriber:
public class Subscriber : IEntity
{
...
private ICollection<HelpChannel> _subscribedList { get; set; } // ICollection!
public class SubscriberMapper : EntityTypeConfiguration<Subscriber>
{
public SubscriberMapper()
{
HasMany(s => s._subscribedList);
}
}
}
Run Code Online (Sandbox Code Playgroud)
并在OnModelCreating:
modelBuilder.Configurations.Add(new Subscriber.SubscriberMapping());
Run Code Online (Sandbox Code Playgroud)
您可能希望使_subscribedList受保护的虚拟,以允许延迟加载.但是甚至可以通过以下方式进行急切加载Include:
context.Subscribers.Include("_subscribedList");
Run Code Online (Sandbox Code Playgroud)