1

我有一个基础实体,超过 20 个实体是从这个基础实体派生的。这是我的实体样本;

Base -> Desc { Id, Description, Code } 
Derived from Desc -> DescCity { Plate } 
Derived from Desc -> DescSex 
Derived from Desc -> DescNationality

和更多...

现在我选择我所有的实体作为基本类型,没有 OfType() 方法,也没有强制转换。

当我通过 Id 或 Description 或任何其他具有 .Where(x=>x.....) 函数的属性选择实体时,一切似乎都正常。但是如果想创建一个像 Person { Name="Baran", DescSex = (DescSex)selectDescById(1) } 这样的实体,问题就开始了……让我们看看 selectDescById 函数;

public void selectDescById(int id){ return db.Desc.Where(x=>x.Id==id).FirstOrDefault(); }

当我将返回的 Desc 对象转换为 DescSex 类型时,实体框架会丢失对实体的跟踪并重新创建选定的 DescSex 实体(我之前从数据库中选择的实体)。并且在每个新的 Person EF 上插入新的 DescSex 实体。

如何在不为每个派生类型编写选择函数的情况下解决此问题?有没有办法继续跟踪?谢谢。

4

0 回答 0