0

假设我有一个这样的 EFF db 模型:

public class DbEFF
    {   
        [Key]
        public long Id { get; set; }
    }

现在我正在创建一个从 db 类继承的类,如下所示:

public class DbTest:DbEFF
{

    public DbTest(long id)
    {
      Id=id;
    }

  public string someotherproperty1 {get;set;}

}

现在我调用以下代码写入数据库:

var db = new DbEFF();
db.Id = "454545";

var model = new MasterEntities();
model.Table1.Add(db);
model.SaveChanges();

现在奇怪的是,我得到一个内部异常,说 someotherproperty1 列不存在。我在这里想念什么?为什么派生类的属性会这样暴露?

我得到的例外是:

{"无效的列名 'someotherproperty1'。"}

4

1 回答 1

1

在实体框架代码中,每个层次结构 (TPH) 的第一个表是默认映射。

这意味着 EF 会将 DbTest 和 DbEFF 都映射到同一个表。它还将添加一个名为 Discriminator 的列,以查看在特定行中存储什么类型的对象(DbTest 或 DbEFF)。

从您得到的错误来看,您的数据库似乎已经存在,并且它是在您添加“其他属性”之前创建的。即您的表没有“someotherproperty”列。

要解决此问题,有几个选项,您需要获取表的架构以匹配您的类,或者您必须选择不同的映射策略。

最简单的解决方法是简单地删除您的数据库并让 EF 为您创建正确的数据库。

于 2013-11-11T07:16:07.123 回答