实体框架4.2一对多,没有DbSet

时间:2011-12-24 15:34:45

标签: c# entity-framework frameworks entity

我正在尝试与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。当我从Context请求项目时(使用.Include(“ProjectManager”)),ProjectManager属性始终为null。 ProjectManagerUserId属性已正确填充GUID。

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

首先,您的导航属性必须标记为虚拟:

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

为什么?

在运行时,EF 4.2创建一个子类并覆盖此属性,以便从db中填充它(使Include work for eager loading等)。