Когда я добавляю дополнительные свойства в автогенерированный класс EF с помощью дополнительного частичного класса, эти свойства не заполняются или не заполняются при выполнении запросов к базе данных.Дополнительные свойства Entity Framework не заполняются DbContext.Database.SqlQuery
Пример:
Авто-Generated класс Person:
public partial class Person
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
Мой собственный частичный класс
public partial class Person
{
public string DisplayName{ get; set; }
}
Когда я сделать следующий запрос:
"SELECT *, (FirstName + LastName) AS DisplayName FROM [Person]"
и использование
DbContext.Database.SqlQuery(typePerson, SQL, null)
Идентификатор, FirstName и LastName заполнены, но не DisplayName.
Однако, когда я создаю новый класс под названием 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; }
}
И запустить тот же запрос с типом MyPerson отображаемое_имя заселен, а также.
Может кто-нибудь объяснить это или сказать мне, как я могу исправить эту проблему, поэтому я могу использовать Partials вместо создания новых классов/типов.
Скачать пример: https://www.dropbox.com/s/dayrv0jzuoju9q3/StackOverflow_EF_ExtraProperties.zip?dl=0
UPDATE 2015-12-28: При чтении через другие StackOverflow и форумах Codeproject я нашел другие способы, чтобы заставить его работать:
1) Использование TypeBuilder (http://www.codeproject.com/Articles/206416/Use-dynamic-type-in-Entity-Framework-SqlQuery), но из-за всех видов зависимостей проекта у меня были проблемы с поиском уже созданных типов, а не с раздуванием памяти;
2) Лучший вариант до сих пор: использование наследования.
Когда я создаю еще один класс именно с этой линией:
class Person_Reflect : Person { }
я могу использовать следующий код (он будет игнорировать отображение в файл и использование отражения EDMX:
List<EF.Person> listPerson = dbEntities.Database.SqlQuery<EF.Person_Reflect>(sql, new object[] { }).ToList<EF.Person>();
ARE YOU уверен, что второй частичный класс «Лицо» находится в правильном пространстве имен? –
И не исключение, так как вы изменили модель? – dotctor
Вы видите DisplayName как свойство без значения? –