2012-01-13 8 views
2

DALプロジェクト内の "Product"エンティティのコレクションを戻すために使用されるEDMがあります。 MVC Webサイトプロジェクトは、ObjectContextを参照して直接インスタンス化し、製品のページングと表示のためにIQueryableをWebサイトに返します。外部パラメータを使用するEntity Frameworkカスタムプロパティ

このEntityでは、単純化するために、「ID」、「レート」、「説明」の各プロパティがあります。私は、 "CostPerMonth"という別の計算されたプロパティを作成して、 "LoanAmount"というWebサイトからの入力を受け取り、簡単にするために、この "CostPerMonth"プロパティを(LoanAmount *レート」)/ 12)。

このデータが使用されるたびに、LoanAmountが常に指定されるため、この計算をDALプロジェクトで行う必要があります。可能な解決策は以下の通りです。

  • Productに部分クラスを作成し、Productに新しいCostPerMonthを追加します。ウェブサイトコントローラでは、データが返されたときに、返されたデータを反復処理して計算を実行することによって、この新しい列にデータを設定します。

  • Productの部分クラスを作成し、Productに新しいプロパティ "CostPerMonth"を追加します。 DALプロジェクトでは、 "LoanAmount"パラメータを受け取り、Listを返すメソッドを持つヘルパークラスを作成します。この問題は、計算を行うためにデータを具体化する必要があるということです。このメソッドは、製品を返すために使用されるLinqクエリで使用される "Skip"および "Take"パラメータを受け入れることができますか?

  • Productの部分クラスを作成し、Productに新しいプロパティ "CostPerMonth"を追加します。 WCF Webサービスを使用してソリューションに別の層を追加します。サービスメソッド内では計算を行い、RESTを使用してデータをMVC Webサイトに返します。

アドバイスをいただければ幸いです。

敬具、

マーク

答えて

1

我々はバックステップを取る場合、あなたは私の答えを説明する方が簡単かもしれませんあなたの質問に求めているものを実際に故障。

  • 我々は((「LoanAmount」*「レート」)/ 12)
  • CostPerMonthがに格納する必要はありませんでしょう計算フィールドがあるオブジェクト/エンティティという名前の製品
  • を持っていますデータベース

この計算フィールドは、プロダクトエンティティのビジネスルールです。あなたがMVCを使用しているとすれば、このコード/ロジックが行くことができる場所は1つだけです。それがモデルです。

あなたはそれが非マッピングされた/計算されたフィールドに座って、あなたのアイデアを与えるためのコードは次のようになりますEFを使用していることを考えると

....

[NotMapped] 
    public decimal CostPerMonth 
    { 
     get { return (LoanAmount * Rate)/12 ; } 
    } 

私はおよそ日間に行くことができますさまざまな層に断片化されたビジネスロジックを持つことに関する問題。

これで、このロジックを他のクライアントが簡単に使用できるようにするには、サービスを公開する必要があります。 (あなたはwebAPI/service stack/wcfなどを使用することができます)、それはあなたのニーズに基づいて本当に別の全体の質問です。しかしここでのポイントは、あなたのロジックが1つの場所にあることです。