![](/img/trans.png)
[英]EntityFramework : Mapping existing one-to-many relationship to Model
[英]EntityFramework 6 relationship mapping to many items
我覺得應該正確設置我的映射,但是當我從數據庫上下文中檢索一個項目時,它沒有任何與之相關的“映射”項目。
我要的映射是這樣的:
頂級項目是“事件”。
一個事件具有與之關聯的許多“ 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;}
}
我的時間槽看起來像:
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檢索事件時,它沒有附加的時隙(它為空)。
MyEvent show = mDb.MyEvents.Find(id);
這里的任何建議將不勝感激。 我可能只是沒有正確設置映射。
您必須打開LazyLoading
public MyEventsDataContext()
: base("MyEventsDatabase")
{
this.Configuration.LazyLoadingEnabled = true;
}
或者您應該包括該屬性。
mDb.MyEvents.Include("TimeSlots").Find(id)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.