2017-11-02 5 views
0

を追加しました。エンティティのバージョンは、余分な列がほとんどない別のテーブルです。Entity Frameworkが継承を混乱させ、スーパークラスではなくサブクラスを返す

は私が

// 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 

     } 
    } 

はそうワイヤがどこかで交差なっているいくつかの予期しない動作を見つけ、この

[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; } 

ようEFでそれらを定義し、すべてのクエリではなく、人のPERSON_AUDITするために外出している

答えて

0

PersonAuditPersonのサブクラスであるため、後者を照会するとPerson incluのインスタンスが返されます前者を傷つける。

これを回避するには、両方とも共通のabstractを継承します。 PersonBase

+0

後者を照会すると、PersonではないPersonAuditが返されます。 –

+2

'PersonAudit' *は' Person'です... – aaron

+0

PersonAuditはサブクラスであり、別のテーブルを指します。私はテーブルを照会しようとしています。 –

関連する問題