簡體   English   中英

EntityFramework 6關系映射到許多項目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM