Вычисляемые свойства в Entity Framework
Предположим, у меня есть объект Employee со следующими свойствами:
string Name { get; }
float Hours { get; }
float Wage { get; }
Я хочу добавить свойство "Зарплата", которое равно Часам * Заработная плата. В обычном бизнес-объекте я бы просто закодировал это свойство, но это, по-видимому, уничтожило бы, если класс должен был быть регенерирован.
Есть ли стандартный способ EF для реализации этого, не сталкиваясь с проблемой сопоставления его с объектом базы данных?
Ответы
Ответ 1
Действительно. Создайте отдельный файл, например EmployeeExtension.cs.
В этом файле поместите следующий код:
public partial class Employee
{
public decimal Salary
{
get { return Hours * Wage; }
}
}
Классы LINQ to SQL и Entity Framework генерируются с ключевым словом partial, чтобы вы могли разделить определение на многие файлы, потому что дизайнеры знали, что вы захотите добавить участников в класс, который aren 't перезаписывается непрерывным автогенерированием базового исходного файла.
Ответ 2
Если я правильно помню, классы, созданные EF, являются частичными. Таким образом, вы можете добавить еще один файл, содержащий другой частичный класс (такое же пространство имен, одно и то же имя класса), которое реализует свойство
public single Salary
{
get
{
return this.Hours * this.Wage;
}
}
Должен делать трюк (если эти синглы не могут быть обнуляемы, заметьте!)
Ответ 3
Я не смог получить ответ "Арго" для работы на начальном этапе. После небольшой игры я заметил, что если бы я украсил свойство (как в WCF), в котором следующий атрибут работал нормально.
[global::System.Runtime.Serialization.DataMemberAttribute()]
В соответствии с инструкциями Argo создайте отдельный файл (например, EmployeeExtension.cs). это должно быть отмечено частично как описано.
В этом файле поместите следующий код:
public partial class Employee
{
[global::System.Runtime.Serialization.DataMemberAttribute()]
public decimal Salary
{
get { return Hours*Wage; }
}
}
Надеюсь, это поможет....
Ответ 4
Вы можете реализовать свойство в классе сущности. Структура сущности будет генерировать частичные классы, позволяющие добавлять членов в класс. Добавьте класс к этому коду:
public partial class Employee {
public Single Salary {
get { return Hours*Wage; }
}
}
Ответ 5
Это не работало для меня с Entity Framework 5. Решением для меня было просто использовать атрибут [NotMapped]. Для получения дополнительной информации см. Code First DataAnnotations