2009-07-15 19 views
28

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

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

私はプロパティを追加したい、営業時間*賃金に等しい給与を。通常のビジネスオブジェクトでは、プロパティでそれをコード化するだけですが、クラスを再生成する必要がある場合は、これはおそらく抹消されます。

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

答えて

50

実際。別のファイルを作成します(例:EmployeeExtension.cs)。このファイルには

、次のコードを配置します:デザイナーが知っていたので、SQLやEntity Frameworkのクラスに

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

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

+0

優秀!私は完全に痛い影のクラスを作成していた。本当にありがとう –

+1

実際のデータモデルでは定義されていないので、これはLinqとエンティティとの間ではうまくいかないようです。 * .edmxに計算フィールドを定義する方法はありますか? – AaronLS

+0

あなたは「働いていないようです」より具体的になることができますか?データベースレベルで計算された値を持つ列を参照している場合は、まったく別の獣です。 – JoshJordan

7

私が正しく覚えていれば、EFによって作成されたクラスは部分的です。 (これらのシングルがNULL可能でない場合は、あなたを気に!)トリックを行う必要がありますので、あなたはおそらくプロパティを実装よりも、別の部分クラスを含む別のファイル(同じ名前空間、当然の同じクラス名)

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

を追加することができ

5

エンティティクラスにプロパティを実装できます。エンティティフレームワークは、クラスにメンバーを追加できる部分クラスを生成します。このようなクラスをコードに追加してください:

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

私は最初にアルゴの答えを得ることができませんでした。周りをちょっと遊んだあと、次の属性がすべて正常に機能しているWCFのようなプロパティを装飾すると気付きました。

「Argoの指示に従って、別のファイル(EmployeeExtension.csなど)を作成してください。これは説明されているように部分的にマークする必要がありますこのことができます...

public partial class Employee 
{ 
    [global::System.Runtime.Serialization.DataMemberAttribute()]  
    public decimal Salary  
    { 
     get { return Hours*Wage; } 
    } 
} 

希望:

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

2

これは私にとってはEntity Framework 5では機能しませんでした。私の解決策は[NotMapped]属性を使用することでした。詳細はCode First DataAnnotations

関連する問題