Wenn ich zusätzliche Eigenschaften zu einer automatisch generierten EF-Klasse hinzufügen, indem eine zusätzliche partielle Klasse verwendet, werden diese Eigenschaften nicht ausgefüllt oder gefüllt, wenn Abfragen für die Datenbank ausgeführt werden.Zusätzliche Eigenschaften von Entity Framework werden nicht von DbContext.Database.SqlQuery
Beispiel:
automatisch generierten Klasse Person:
public partial class Person
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
Meine eigene partielle Klasse
public partial class Person
{
public string DisplayName{ get; set; }
}
Wenn ich die folgende Abfrage machen:
"SELECT *, (FirstName + LastName) AS DisplayName FROM [Person]"
und Verwendung
Die ID, FirstName und LastName sind ausgefüllt, aber nicht der DisplayName.
Allerdings, wenn ich eine ganz neue Klasse namens MyPerson
public partial class MyPerson
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string DisplayName{ get; set; }
}
Und die gleiche Abfrage mit der Art der MyPerson laufen die DisplayName- auch bevölkert ist.
Kann mir jemand erklären oder mir sagen, wie ich dieses Problem beheben kann, damit ich Partials verwenden kann, anstatt neue Klassen/Typen erstellen zu müssen.
herunterladen ein Beispiel: https://www.dropbox.com/s/dayrv0jzuoju9q3/StackOverflow_EF_ExtraProperties.zip?dl=0
UPDATE 2015.12.28: Während durch andere Stackoverflow und Codeproject-Foren zu lesen fand ich eine andere Möglichkeiten, um es an die Arbeit zu machen:
1) Unter Verwendung von Typebuilder (http://www.codeproject.com/Articles/206416/Use-dynamic-type-in-Entity-Framework-SqlQuery), aber aufgrund aller Projektabhängigkeiten hatte ich Probleme, bereits erstellte Typen zu finden und den Speicher nicht zu sprengen;
2) Beste Option bisher: Vererbung verwenden.
Wenn ich eine andere Klasse mit nur diese Zeilen zu erstellen:
class Person_Reflect : Person { }
ich den folgenden Code verwenden können (es wird die Zuordnung in der EDMX-Datei und die Nutzung Reflexion ignorieren:
List<EF.Person> listPerson = dbEntities.Database.SqlQuery<EF.Person_Reflect>(sql, new object[] { }).ToList<EF.Person>();
Sind Sie sicher, dass die 2. Teilklasse von 'Person' im richtigen Namensraum ist? –
Und keine Ausnahme, seit Sie das Modell geändert haben? – dotctor
Seht ihr DisplayName als eine Eigenschaft ohne Wert? –