Po dodaniu dodatkowych właściwości do automatycznie wygenerowanej klasy EF za pomocą dodatkowej częściowej klasy, właściwości te nie są wypełniane lub wypełniane podczas uruchamiania zapytań w bazie danych.Dodatkowe właściwości Entity Framework nie są zapełniane przez DbContext.Database.SqlQuery
Przykład:
Auto-Generated class Person:
public partial class Person
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
Moja własna klasa częściowe
public partial class Person
{
public string DisplayName{ get; set; }
}
Kiedy wprowadzić następujące zapytanie:
"SELECT *, (FirstName + LastName) AS DisplayName FROM [Person]"
i wykorzystania
DbContext.Database.SqlQuery(typePerson, SQL, null)
Identyfikator, imię i nazwisko są wypełnione, ale nie nazwa wyświetlana.
Jednak gdy tworzę zupełnie nową klasę o nazwie 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; }
}
i uruchomić tę samą kwerendę z rodzaju MyPerson DisplayName jest zaludnionych, jak również.
Czy ktoś może wyjaśnić to lub powiedz mi, jak mogę rozwiązać ten problem, aby można było używać częściowe zamiast tworzenia nowych klas/typów.
Pobierz przykład: https://www.dropbox.com/s/dayrv0jzuoju9q3/StackOverflow_EF_ExtraProperties.zip?dl=0
UPDATE 28.12.2015: Podczas czytania przez innych stackoverflow i forach codeproject znalazłem innego sposobu, aby zmusić go do pracy:
1) Korzystanie Typebuilder (http://www.codeproject.com/Articles/206416/Use-dynamic-type-in-Entity-Framework-SqlQuery), ale z powodu różnych zależności projektu miałem problemy ze znalezieniem już utworzonych typów i nie wysadzenie pamięci;
2) Najlepsza opcja do tej pory: wykorzystanie dziedziczenia.
Kiedy utworzyć inną klasę z właśnie to linie:
class Person_Reflect : Person { }
mogę użyć następującego kodu (będzie ignorować mapowanie w EDMX akt i wykorzystanie refleksji:
List<EF.Person> listPerson = dbEntities.Database.SqlQuery<EF.Person_Reflect>(sql, new object[] { }).ToList<EF.Person>();
Czy jesteś czy druga klasa cząstkowa "Osoby" znajduje się we właściwej przestrzeni nazw? –
I nie ma wyjątku, ponieważ zmieniłeś model? – dotctor
Czy widzisz DisplayName jako właściwość bez wartości? –