有一个问题我一直在努力。 这是我发现的唯一一个描述类似问题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");
});
在db中我得到一个映射表EmployeeLocations,一切正常。
现在我想添加一个视图 - 一种员工扩展。我在DB和相关的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 =&gt; e.EmployeeID); this.ToTable(“EmployeeLocations”);
它填充正常,我可以查询它,但没有位置 - 它总是空的。
是否有人知道如何定义这种多对多关系?
答案 0 :(得分:0)
按照您的模型,您不会加载相关实体(位置)。您需要将集合标记为虚拟,以自动填充它(延迟加载):
public virtual ICollection<Location> Locations {get; set;}
或明确地在您的查询中添加.Include(e =&gt; e.Locations)(您需要为其工作添加名称空间System.Data.Entity):
var employeeItem = context.Employee.Include(e => e.Locations).FirstOrDefault(x => x.EmployeeName == "Bob");
希望有所帮助!