首先使用代码的多对多关系映射视图
本文关键字:关系 映射 视图 代码 | 更新日期: 2023-09-27 18:27:12
我遇到了一个问题。这是我发现的唯一一篇描述类似问题的帖子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,一切都很好。
现在我想添加一个视图,类似于员工扩展。我在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和这个配置:这HasKey(e=>e.EmployeeID);这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");
希望能有所帮助!