簡體   English   中英

實體框架對繼承感到困惑,返回子類而不是超類

[英]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

由於PersonAuditPerson的子類,因此查詢后者將返回Person實例,包括前者。

為了避免這種情況,使兩者都繼承一個通用的abstract庫,例如PersonBase

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM