【问题标题】:Error in inheritence mapping in Entity framework 5实体框架 5 中的继承映射错误
【发布时间】:2013-05-17 06:13:08
【问题描述】:

我有一个具有此架构的现有数据库:

  • 表用户:用户 ID、名字、姓氏
  • 表管理器:ManagerID(PK、FK)
  • 表协调器:CoordinatorID(PK、FK)

FK 指的是 User 表中的 UserID 字段

在实体方面我有:

[Table("User")]
public abstract partial class User
{
  public int UserID { get; set; }
      public virtual string LastName{ get; set; }
  public virtual string Firstname{ get; set; }

    }

[Table("Manager")]
public partial class Manager : User
{
    public int ManagerID{ get; set; }
    }

[Table("Coordinator")]
public partial class Coordinator: User
{
    public int CoordinatorID{ get; set; }
    }

我的问题是实体框架正在搜索名为 Manager_UserID 的列(用户表的一种外键)。但是我的数据库中不存在此列。有什么方法可以在不改变数据库结构的情况下正确映射数据库和模型

谢谢

【问题讨论】:

    标签: entity-framework inheritance mapping


    【解决方案1】:

    将您的主键名称更改为每个表中的 Id。 EF 知道这意味着让它成为主键

    [更新]

    由于您提到 3 个表,我认为您需要 Table per Type 继承 TPT,如所述 here 您需要在 Manager 类中提及 User 作为导航属性。也不要从用户那里继承。

    public partial class Manager  
    {
        public int ManagerID{ get; set; }
        public virtual User Manager { get; set; }
    }
    

    此外,只有导航属性需要是虚拟的。不是 FirstName、LastName 等字段属性

    还要查看您的上下文是如何设置的。每个表应该有 3 个 DBSet 一个

    【讨论】:

    • 其实主键没有问题 EF 是在 manager 表中搜索到 User 表的外键。显示的消息是:列名“Manager_UserID”无效。但在我的情况下,外键和主键是相同的。
    猜你喜欢
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 2015-08-02
    • 2014-12-18
    • 1970-01-01
    相关资源
    最近更新 更多