我添加了 Audit 版本的实体,这些实体是具有少量额外列的单独表格。
我在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
答案 0 :(得分:0)
由于PersonAudit
是Person
的子类,查询后者会返回Person
的实例,包括前者。
为避免这种情况,请同时继承一个共同的abstract
基数,例如PersonBase
。