30

次のプロパティを持つEmployeeオブジェクトがあるとします。

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

時間*賃金に等しいプロパティSalaryを追加したいと思います。通常のビジネスオブジェクトでは、それをプロパティにコーディングするだけですが、クラスを再生成する必要がある場合は、おそらくこれが消去されます。

データベースエンティティにマッピングする手間をかけずにこれを実装するEF標準の方法はありますか?

4

5 に答える 5

52

それはそう。EmployeeExtension.csなどの別のファイルを作成します。

このファイルに、次のコードを配置します。

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

LINQ to SQL および Entity Framework クラスは、部分キーワードを使用して生成され、多くのファイルに定義を分割できます。これは、ベース ソース ファイルを継続的に自動生成することによって、上書きされないメンバーをクラスに追加する必要があることを設計者が知っていたためです。 .

于 2009-07-15T14:56:59.797 に答える
7

私の記憶が正しければ、EF によって作成されたクラスは部分的です。したがって、プロパティを実装する別の部分クラス (同じ名前空間、同じクラス名) を含む別のファイルを追加することもできます。

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

トリックを行う必要があります(それらのシングルがnull可能でない場合は、気をつけてください!)

于 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 に答える