我觉得我的映射应该被正确设置,但是当我从db上下文中检索一个项目时,它没有任何与它相关的“映射”项。
我要做的映射是:
顶级项目是“事件”。
一个事件有许多与它相关的"TimeSlot“。
一个TimeSlot有许多与它相关的字符串。
public class MyEvent
{
private ICollection<TimeSlot> mTimeSlots;
public virtual ICollection<TimeSlot> TimeSlots
{
get{return mTimeSlots ?? (mTimeSlots = new Collection<TimeSlot>());}
set{mTimeSlots = value;}
}
[Key]
public int Id {get;set;}
}我的TimeSlot看起来是:
public class TimeSlot
{
private ICollection<string> mItems;
public virtual ICollection<string> Items
{
get { return mItems ?? (mItems = new Collection<string>()); }
set { mItems = value; }
}
[Key]
public virtual int Id { get; set; }
public virtual string Label { get; set; }
}我的DbContext看起来像:
public class MyEventsDataContext : DbContext
{
public MyEventsDataContext()
: base("MyEventsDatabase")
{
// Do nothing.
}
public DbSet<MyEvent> MyEvents { get; set; }
public DbSet<TimeSlot> TimeSlots { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEvent>()
.HasMany<TimeSlot>(e => e.TimeSlots);
}
}为了测试目的,我正在迁移一些默认数据,如下所示:
protected override void Seed(MyEventsDataContext context)
{
// This method will be called after migrating to the latest version.
var timeSlot1 = new TimeSlot {Label = "Slot 1"};
timeSlot1.Items.Add("Do stuff 1");
timeSlot1.Items.Add("Do stuff 2");
timeSlot1.Items.Add("Do stuff 3");
var timeSlot2 = new TimeSlot {Label = "Slot 2"};
timeSlot2.Items.Add("Do stuff 1");
timeSlot2.Items.Add("Do stuff 2");
timeSlot2.Items.Add("Do stuff 3");
var timeSlot3 = new TimeSlot {Label = "Slot 3"};
timeSlot3.Items.Add("Do stuff 1");
timeSlot3.Items.Add("Do stuff 2");
timeSlot3.Items.Add("Do stuff 3");
context.TimeSlots.AddOrUpdate(new[] {timeSlot1, timeSlot2, timeSlot3});
var event1 = new MyEvent
{
Address = "123 Street Ln",
CampaignId = "abc123",
City = "City",
CreatedDate = DateTime.Now,
EventDate = DateTime.Now,
EventType = "TradeShow",
Name = "Show Name",
ProductInterest = "MyArm",
State = "State",
Zipcode = "12345",
TimeSlots = new Collection<TimeSlot> {timeSlot1, timeSlot2, timeSlot3}
};
context.MyEvents.AddOrUpdate(event1);
var event2 = new MyEvent
{
Address = "321 Street Ln",
CampaignId = "123abc",
City = "City",
CreatedDate = DateTime.Now,
EventDate = DateTime.Now,
EventType = "Conference",
Name = "Show Name",
ProductInterest = "MyArm",
State = "State",
Zipcode = "54321",
TimeSlots = new Collection<TimeSlot> {timeSlot1, timeSlot2, timeSlot3}
};
context.MyEvents.AddOrUpdate(event2);
}在我的控制器中,当我从DbContext检索一个事件时,它没有附加的TimeSlots (它是空的)。
MyEvent show = mDb.MyEvents.Find(id);这里的任何建议都将不胜感激。我可能只是没有正确地设置映射。
发布于 2014-12-01 21:06:37
你必须打开LazyLoading
public MyEventsDataContext()
: base("MyEventsDatabase")
{
this.Configuration.LazyLoadingEnabled = true;
}或者你应该把财产包括进去。
mDb.MyEvents.Include("TimeSlots").Find(id)https://stackoverflow.com/questions/27236934
复制相似问题