实体框架4.2一对多,无DbSet
本文关键字:DbSet 一对多 框架 实体 | 更新日期: 2023-09-27 18:18:41
我试图与EF 4.2建立一对多关系,但它只是不起作用。一些数据:
table "BugNet_Projects"
ProjectManagerUserId uniqueidentifier not null
table "aspnet_Users"
UserId uniqueidentifier not null
class Project
{
[ForeignKey("ProjectManagerUserId")]
public User ProjectManager { get; set; }
public Guid ProjectManagerUserId { get; set; }
}
class User
{
public Guid UserId { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Project>().Map(p => p.ToTable("BugNet_Projects"));
modelBuilder.Entity<User>().Map(u => u.ToTable("aspnet_Users"));
}
注意User实体/aspnet_Users表没有对Projects的引用。数据库中有一个从ProjectManagerUserId到UserId的FK。当我从上下文请求一个项目时(使用. include ("ProjectManager")), ProjectManager属性总是空的。ProjectManagerUserId属性被正确地填充为GUID。
有人知道我做错了什么吗?
首先,你的导航属性必须被标记为virtual:
public class Project
{
[ForeignKey("ProjectManagerUserId")]
public virtual User ProjectManager { get; set; }
public Guid ProjectManagerUserId { get; set; }
}
为什么?
在运行时,EF 4.2创建一个子类并覆盖这个属性,以便从db填充它(使Include工作于即时加载等)。