实体框架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。

有人知道我做错了什么吗?

实体框架4.2一对多,无DbSet

首先,你的导航属性必须被标记为virtual:

public class Project
{
    [ForeignKey("ProjectManagerUserId")]
    public virtual User ProjectManager { get; set; }
    public Guid ProjectManagerUserId { get; set; }
}

为什么?

在运行时,EF 4.2创建一个子类并覆盖这个属性,以便从db填充它(使Include工作于即时加载等)。