0

SqlMetalを使用して、単純で小さなデータベースのLinqToSqlコードを自動生成することを考えています。データベースには、いくつかの主キーと外部キーを持つテーブルのみが含まれます(つまり、ビュー、ストアドプロシージャ、関数などはありません)。Linqを使用して、すべての結合、グループ化、並べ替え、および高度なデータ操作を実行したいと思います。

私はLinqToObjectsとLinqToXmlの経験がありますが、適切なORMまたはLinqToSqlを使用したことはありません。

いくつかの質問:

  1. 私の以前の経験を考えると、SqlMetal / LinqToSqlの学習曲線はどれくらい急ですか?
  2. SqlMetalは単純なデータベースに対して信頼できますか?
  3. もしあれば、どのような驚きに遭遇する可能性がありますか?
  4. プロジェクトを自動化して、プロジェクトをビルドするたびに、またはさらに良いことに、プロジェクトを再構築するたびにLinqToSqlコードが再生成されるようにするにはどうすればよいですか?(私はVisual Studio 2008を使用します。)
  5. SqlMetalとLinqToSqlの使用についてすぐに理解するための優れたチュートリアルをお勧めしますか?
4

2 に答える 2

2

タイトルの質問に対する答えは「はい」です。これは、テーブルのみのデータベースに最適なソリューションです(データベースが大きくなり、ビューやストアドプロシージャなどの他のデータベース構造が含まれるようになると、ある程度まで大きくなる可能性があります)。

  1. かなり浅い。主な違いは、Linq2Objectsで機能する特定のメソッドがLinq2SQLでは機能しないことです。オブジェクトとLinq2SQLを一緒に混合するときは注意する必要があります。「私たちがサポートしているのはContainsだけです」という効果を示す例外が発生したときに、これにヒットしたことがわかります。
  2. とても。
    • 特定の状況では、Linq2SQLが最も効率的なSQLを生成しないことに気付くでしょう。
    • 時々、物事はトランザクションでトリッキーになることがあります。
    • 更新ステートメントはありません。レコードのセットを更新するたびに、それらを選択し、各レコードを更新してから、を更新する必要がありますSubmitChanges()
    • 選択のみを行う場合を除いて、テーブルに主キーが必要です。主キーがないと、削除または更新できません。
    • Linq2SQLは、多対多の関係を直接サポートしていません。
  3. 簡単な解決策は、ビルドするたびにLinq2SQLDataContextsを生成するビルド前タスクを設定することです。

すべてにLinq2SQLを使用するという目標については、厄介なLINQクエリ(および厄介なデバッグサイクル)に備えてください。結合構文は冗長であり、クエリの複雑さによっては、同等のSQLよりも保守がすぐに難しくなる可能性があります。グループ化は。ほど簡単ではありませんGROUP BY

于 2009-12-24T01:10:26.577 に答える
0

LINQ に真剣に取り組んでいる場合は、Linq in Action のコピーを入手してください。理解しやすい章で、Linq と SqlMetal のすべての側面について説明します。

また、興味がある場合は、 TT4 テンプレートを使用してモデルを生成するSubSonic 3を使用できます。これは VS2008 で非常に自動化されています。次に、通常の Linq クエリを使用してデータにアクセスします。これがおそらく最も簡単な方法です。

于 2009-12-24T01:17:11.477 に答える