どのシナリオで、LINQからSQLの結果までカスタムビジネスオブジェクトを作成したいと思いますか?
-
01-10-2019 - |
質問
単純なLINQからSQLクエリは、製品オブジェクトを返す場合があります。このオブジェクトは、このオブジェクトをビジネスレイヤーに渡し、そのオブジェクトに対して直接データを読み取り、更新することができました。
LINQクエリの実行後、結果のオブジェクトがカスタムビジネスオブジェクトに(AutomApperまたは手動で)マッピングされるという実装が多数見られました。したがって、私がlinqオブジェクトを持っている可能性のある製品の場合:
Product.ProductidおよびProduct.ProductName
そして、次のようなカスタム製品ビジネスオブジェクトを定義します。
class BusineszProduct
{
string ProductId;
string ProductName;
}
そして、次のようないくつかの単純なマッピングコード
businessproduct myproduct = new BusinessProduct(); myproduct.productid = product.productid; myproduct.productname = product.productname;
次に、myproductをビジネスレイヤーに渡し、変更し、読み取りなどを読み、後でLinqオブジェクトを更新します。
どのシナリオで、カスタムBusinessProductクラスを作成したいですか?
解決
私見、一般的な理由は、LINQ2SQLエンティティに付属のLINQ2SQL ORM荷物からビジネスエンティティを切り離す /解き放つことです
ただし、極端なシナリオでは、複数のマッピングがある場合があります。
- 「データアクセス」レイヤーのLINQ2SQLエンティティ - しかし、これらはL2S Datacontextにしっかりと結合されています
- POCOS /ビジネスエンティティは、ビジネスルールアプリケーション、検証などに使用されます
- WebサービスまたはWCFを使用している場合、ワイヤー全体でシリアル化されているときに非常に特定の形式でエンティティを提示する必要がある場合、データをメッセージエンティティとして表すこともできます。
- そして最後に、MVC / MVP / MVVM UIアーキテクチャを持っている場合は、意見に合わせてエンティティを調整する必要があります
他のヒント
私のアプリケーションでは、6つの異なるテーブルを結合し、それぞれからいくつかの列を提供するLINQクエリを実行します。その一連の情報に一致するテーブル固有のオブジェクトタイプはありません。したがって、レコードセットを処理するカスタムビジネスクラスを作成します。
あなたはそれを自分で見ることができます(で http://www.njtheater.org)
から選択します Productions
日付ごとにテーブル。プレイテーブル(タイトルと説明がある場所)、劇団テーブル(劇場の会社名が得られる場所)、会場テーブル(劇場名と都市が得られる場所)に参加します。プレイテーブルは、People Table(Playwrightsの名前を取得する場所)に参加するPlaycreditsテーブルに結合します