实体框架中的计算属性

.net calculated-columns entity-framework

假设我有一个具有以下属性的Employee对象:

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

我想添加一个属性Salary,它等于Hours * Wage。在一个普通的业务对象中,我只是简单地在属性中编写代码,但如果需要重新生成类,这可能会消失。

是否有EF标准方法来实现这一点,而不必经历将其映射到数据库实体的麻烦?

一般承认的答案

确实。创建一个单独的文件,例如EmployeeExtension.cs

在此文件中,放置以下代码:

public partial class Employee
{
    public decimal Salary
    {
        get { return Hours * Wage; }
    }
}

LINQ to SQL和Entity Framework类是使用partial关键字生成的,允许您将定义拆分为多个文件,因为设计人员知道您需要通过不断自动生成基本源文件来向类中添加未被覆盖的成员。


热门答案

如果我没记错的话,EF创建的类是部分的。因此,您可以添加另一个包含另一个部分类(相同的命名空间,当然是相同的类名)的文件,而不是实现该属性

public single Salary
{
   get
   {
       return this.Hours * this.Wage;
   }
}

应该做的伎俩(如果那些单打不可空,请注意!)




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因