[英]Entity Framework confused about inheritance, returning subclasses instead of superclasses
我添加了實體的審計版本,這些實體是具有少量額外列的單獨表。
我像這樣在EF中定義它們
[Table("PERSON")]
class Person {...} // regular properties
[Table("PERSON_AUDIT")]
class PersonAudit : Person, IAudit { ... } // additional audit properties
public virtual DbSet<Person> Persons { get; set; }
public virtual DbSet<PersonAudit> PersonAudits { get; set; }
發現一些意想不到的行為
// querying table PERSON. this method should have nothing to do with PERSON_AUDIT
public Person GetPerson(int personId)
{
using (var db = new Context())
{
db.Persons.Take(5).ToList(); // queries PERSON_AUDIT table!
db.Persons.Find(personId); // EXCEPTION: "sequence contains more than one element" because it queries PERSON_AUDIT table and returns multiple
db.Persons.Where(x => x.PersonId == personId).ToList(); // queries / returns multiple PersonAudit objects
}
}
因此電線在某處交叉,所有查詢都發送到PERSON_AUDIT,而不是PERSON
由於PersonAudit
是Person
的子類,因此查詢后者將返回Person
實例,包括前者。
為了避免這種情況,使兩者都繼承一個通用的abstract
庫,例如PersonBase
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.