30

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

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

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

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

4

5 回答 5

52

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

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

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

LINQ to SQL 和 Entity Framework 类是使用partial关键字生成的,以允许您将定义拆分为多个文件,因为设计人员知道您将希望向类中添加不会被持续自动生成基本源文件覆盖的成员.

于 2009-07-15T14:56:59.797 回答
7

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

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

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

于 2009-07-15T14:58:16.893 回答
6

我最初无法得到“Argo”的答案。玩了一会儿后,我注意到如果我装饰了属性(如在 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; } 
   } 
}  

希望这可以帮助…。

于 2011-01-25T14:23:39.270 回答
5

您可以在实体类中实现该属性。实体框架将生成部分类,允许您向类中添加成员。将这样的类添加到您的代码中:

public partial class Employee {
  public Single Salary {
    get { return Hours*Wage; }
  }
}
于 2009-07-15T14:59:42.583 回答
3

这对我使用 Entity Framework 5 不起作用。我的解决方案是简单地使用 [NotMapped] 属性。有关更多信息,请参阅Code First DataAnnotations

于 2012-10-19T16:58:51.933 回答