11

私は、DataContext を整理する方法について最善の戦略を見つけようとしています。私たちが扱っている典型的な DB には、通常は 50 から 100 のテーブルがあり、通常は第 3 正規形であり、それらの間に多くの関係があります。次の 2 つのオプションがあると思います。

  1. すべてのテーブルを単一のコンテキストに配置します。これにより、私たちが行うことはすべて、データベースで正しい順序でコミットされます。問題は、LINQ デザイナーが 50 以上のテーブルで混乱することであり、パフォーマンスが影響を受けるのではないかと心配しています。
  2. テーブルの論理グループに基づいて、いくつかのデータ コンテキストを作成します。問題は、関係の一方が一方のコンテキストにあり、もう一方が別のコンテキストにある場所があることです。両方のコンテキストを正しい順序で手動でコミットする必要があります。

これを処理するための推奨される方法はありますか?

詳細:

LINQ to SQL の上に独自のエンティティと作業単位を作成したいと考えています。エンティティは、LINQ エンティティへのマッピングも指定される xml モデル ファイルで定義されます。カスタム ツールは、モデルに基づいてエンティティ (POCO) を生成します。クライアント コードは、エンティティと作業単位のみと対話します。DataContext または LINQ エンティティを直接使用しないでください。ただし、LINQ to SQL がすぐに提供するものを複製したくないので、基礎となる LINQ DataContext を使用したいと考えています。これは、異なるデータ コンテキストで 2 つの注文を持つことができないことを意味します。POCO 注文を両方にマップすることはできないからです。

4

4 に答える 4

4

これはよくある質問で、ここで徹底的に分析されています: http://craftycode.wordpress.com/2010/07/19/linq-to-sql-single-data-context-or-multiple/

基本的に、強く接続されたテーブル グループごとに 1 つのデータ コンテキスト、またはデータベースごとに 1 つのデータ コンテキストを作成する必要があります。

于 2010-07-19T15:15:33.203 に答える
2

LINQ-to-SQL マッピングは、型指定された DataSet に似ています。使用すると、データを含むセッションを処理します。複数の異なる DataContext に同じテーブルを含めることができます。結局のところ、それらは単なるクラスです。既存のデータを入力するか、それらを使用して新しいデータを作成することによって、データベースとの対話を開始するまで、それらは何の意味もありません。

したがって、新しいカタログを送信するときに扱う Customer、Address、Phone などのテーブルがあるとします。次に、注文を作成するときに使用する Invoice、Line Item、Product などのテーブルがあります。しかし、後者のセットでは、Customer も必要になる場合があります。それはいいです。一貫性のないデータを使用しないように、一度に 1 つのセッションのみをアクティブにするように注意する必要があります。重複して使用しない限り、さまざまな DataContext でエンティティが重複しても問題はありません。

混乱している限り、DataContext を特定の名前空間に配置できます。また、さまざまなエンティティを特定の名前空間に配置することもできます (ただし、DataContext 内のエンティティのセットごとに名前空間は 1 つだけです)。これは、[プロパティ] ウィンドウで行うことができます。これにより、Intellisense の混乱を抑えることができます。

于 2008-10-24T14:50:16.077 に答える
0

データベースごとに1つのデータコンテキストを使用します。

平均的なテーブルは最大100になる可能性がありますが、経験上、パフォーマンスの問題は発生していません。

datacontextは、コンパイルされた別のプロジェクトにあります。BLLから参照された結果のdll

于 2009-04-18T20:07:54.213 に答える
0

作業単位を実行できるコンテキストを作成する必要があります。これには、重複するテーブル マッピングが含まれる場合があります。

Context1 : 顧客には多くの請求書があります

Context2 : 顧客には多くの注文があります

Context3 : 請求書に多くの注文がある

于 2008-10-24T14:30:41.687 に答える