簡體   English   中英

首先與代碼建立多對多關系的Map View

[英]Map View with many to many relationship with code first

有一個問題正在困擾一段時間。 這是我發現的唯一描述了類似問題post1的帖子 ,但是它並不能解決我的問題。

我首先為我的應用程序使用EF6.1代碼,並且需要為其添加視圖並定義多對多關系。

考慮一下:

public class Employee
{
    public int EmployeeId { get; set; }

    public int EmployeeName { get; set; }

    ICollection<Location> Locations {get; set;}
}

public class Location
{
    public int LocId { get; set; }

    public int LocName { get; set; }
}

在模型構建器OnModelCreating中:

            modelBuilder.Entity<Employee>().HasMany<Location>(t => t.Locations)
            .WithMany().Map(mc =>
            {
                mc.ToTable("EmployeeLocations");
                mc.MapLeftKey("EmployeeId");
                mc.MapRightKey("LocId");
            });

在數據庫中,我得到了一個映射表EmployeeLocations,並且一切正常。

現在,我想添加一個視圖-一種員工擴展。 我在數據庫和相關的paco類中有此視圖:

      public class Employee
{
    public int EmployeeId { get; set; }

    public int EmployeeName { get; set; }

     public string SomeOtherProp {get; set;}
    ICollection<Location> Locations {get; set;}
}

我為其添加了DbSet和此配置:this.HasKey(e => e.EmployeeID); this.ToTable(“ EmployeeLocations”);

它可以很好地填充並且我可以查詢它,但是沒有位置信息-它始終為空。

有誰知道如何定義這種多對多關系?

按照您的模型,您不會加載相關的實體(位置)。 您需要將集合標記為虛擬,以自動填充(延遲加載):

public virtual ICollection<Location> Locations {get; set;}

或通過在查詢中添加.include(e => e.Locations)來顯式添加(您需要添加名稱空間System.Data.Entity才能使其工作):

var employeeItem = context.Employee.Include(e => e.Locations).FirstOrDefault(x => x.EmployeeName == "Bob");

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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