【问题标题】:Entity Framework 4.2 one-to-many, no DbSetEntity Framework 4.2 一对多,无 DbSet
【发布时间】:2012-01-27 08:44:06
【问题描述】:

我正在尝试与 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"));
}

请注意,用户实体/aspnet_Users 表没有对项目的引用。数据库中有一个从 ProjectManagerUserId 到 UserId 的 FK。当我从上下文(使用 .Include("ProjectManager"))请求项目时,ProjectManager 属性始终为空。 ProjectManagerUserId 属性已正确填充 GUID。

有谁知道我做错了什么?

【问题讨论】:

    标签: c# entity-framework frameworks entity


    【解决方案1】:

    一方面,您的导航属性必须标记为虚拟:

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

    为什么?

    在运行时,EF 4.2 会创建一个子类并覆盖此属性,以便从数据库中填充它(使 Include 可用于预加载等)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-28
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多