2009-08-04 1 views
0

linq2sqlとnhibernateの選択に悩まされています。linq to sqlとnhibernateのうち、次のものに基づいて選択してください。

  • これは
  • それは、多分50〜60(SQL Server 2008のテーブルの多くを持つことになりますasp.net MVCアプリケーションは次のとおりです。

    私はあなたのポイント形式のアプリケーションでいくつかの洞察力を与えるみましょう)

  • 私はリポジトリ+ nhiberateパターンが私を与えることができると思い、私のために行われ、すべての基本的なCRUDロジック()私はあまりにも複雑なマッピングを持っていない

  • を望む
  • は、私のテーブルが検索されます以下のようなもの:

ユーザ(ユーザID、ユーザ名) のUserProfile(ユーザID、...) コンテンツ(コンテンツID、タイトル、本文、日付) Content_User(コンテンツID、ユーザID)一般

ので、、私はPKテーブルを持っています、そして、そのPKを参照する他のテーブルがたくさんあります。 FKテーブル)。 私はまた、PK、FKペアを含む多くのマッピングテーブルを持っています。

Entity Wise、私はUser.cs、UserProfile.csし、各オブジェクトを読み込む方法をします。 UserProfileプロパティとContent Collectionプロパティを持つUserクラスを探しているわけではありません(ユーザーに関連する10〜20のテーブルがあります。

私がnhibernateに向かって学ぶことの1つは、クロスDBポテンシャルと、すべてのメインテーブルで基本的なDB操作をほぼ即座に提供するリポジトリパターンです!

+0

ちょうど両方を試して、NHibernateを選んでください! ^^ –

答えて

2

LinqからSQLにいたるまで、クラスからテーブルへのマッピングは非常に単純なので、難しいことはありません。これにより、データベースを手動でデータベースにマッピングする作業を最初からやっていなくても、非常に迅速に作業を開始できます。

NHibernate + Fluent NHibernateとそのAutoMapping機能を使用することもできますが、Fluent NHibernate AutoMappingはまだ若いです。

あなたのエンティティをどのように見せたいか分かりませんが、LinqをSQLにすると大きな混乱を招き、部分的なクラスを使って拡張できます。 NHibernateはあなたが望むようにクラスをデザインすることができ、あなたのために何も生成しません。 Linq to SQLでPOCOクラスを使用することもできますが、これはHibernateではなくLinqをSQLに使用するすべての利点を取り除きます。

リポジトリパターンと汎用リポジトリの使用については、NHibernateだけでなく、LinqとSQLの間でも非常にうまくやり遂げることができます。私の意見では、それはSQLへのLinqの素晴らしいことの一つです。

おそらくSQL Server以外のデータベースのサポートが必要な場合は、NHibernateが唯一の選択肢です。しかし、おそらく問題ではない場合は、私が選択する際の主な要因としてそれを使用しないことをお勧めします。他の要因がおそらくあなたのプロジェクトにもっと影響を与えます。

結論:

すべてのすべてで、私はそれはあなたがすぐに始めましょうとあなたのニーズには十分であるであろうから、この場合には、LINQ to SQLのをrecommentでしょう。そのための前提条件は、ドメイン内にコードが生成され、乱雑なコードが作成されるという問題には問題がなく、将来他のデータベースをサポートする必要がないと確信しているということです。そうでなければ、本当に素晴らしいORMであるので、私はNHibernateをお勧めします。

+0

WtfはNHibernateのオートマッピング機能ですか? :/ –

+0

これは、標準NHibernateではなく、Fluent NHibernateの一部です。ここでは、自動マッピングのためのFluent NHibernate wikiへのリンクがあります:http://wiki.fluentnhibernate.org/show/AutoMapping –

0

城プロジェクトのActiveRecordライブラリでnHibernateを使用する唯一の方法です。それ以外の場合、nHibernateは独自の小さなインフラストラクチャプロジェクトになります。私が話していることを見るには、questions in the nHibernate tagをチェックしてください。

私がARについて変更する可能性があるのは、SELECT操作の結果をT []の代わりにListとして返すことだけです。もちろん、C#のソースコードを使って、私が望むならそれを行うことができます。

ActiveRecordでは、マッピング情報はクラスを飾る属性に保存されます。天才で、私はパターンとこの特定のライブラリの巨大な支持者です。

+0

「nHibernateはあなた自身の小さなインフラプロジェクトになります。 – sirrocco

+0

私が言っていることは、nHibernateがデバッグとトラブルシューティングをしなければならない動物になるということです。 ARはすべてのマッピングを自動的に処理します。簡単です。ちょうど今日に来た10かそこらのnHibernate質問を見てください。 –

1

linq2sqlは、1つのクラスマッピングにつき1つのテーブルで作業することを本当に望んでいます。したがって、UserMasterとUserDetailテーブルがある場合、デフォルトのlinqオブジェクト生成を使用するときは2つのオブジェクトを参照しています。 linqエンティティをビジネスエンティティにマッピングすることで回避することができます(Rob Coneryのstorefront screencastsを参照)。しかし、オブジェクトマッピングコードの作成やAutomapperのようなものを使用することに戻ります。

複数のテーブルにまたがってクラスを分割できるようにしたい場合は、NHibernateを使用します。そうでない場合、linqの学習曲線は小さくなります。

関連する問題