Подтвердить что ты не робот

Вычисляемые свойства в Entity Framework

Предположим, у меня есть объект Employee со следующими свойствами:

string Name { get; }
float Hours { get; }
float Wage { get; }

Я хочу добавить свойство "Зарплата", которое равно Часам * Заработная плата. В обычном бизнес-объекте я бы просто закодировал это свойство, но это, по-видимому, уничтожило бы, если класс должен был быть регенерирован.

Есть ли стандартный способ EF для реализации этого, не сталкиваясь с проблемой сопоставления его с объектом базы данных?

4b9b3361

Ответ 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