我正在尝试与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。
有谁知道我做错了什么?
答案 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等)。