我有一个基础实体,超过 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 实体。
如何在不为每个派生类型编写选择函数的情况下解决此问题?有没有办法继续跟踪?谢谢。