2009-05-29 7 views
10

ASP.NET MVCの開発に着手し、独自のエンティティフレームワークを長年使用しています。しかし、私たちはエンティティフレームワークが可能な以上にサポートする必要があるので、より堅牢なフレームワークでMVCを使用することについていくつかの意見を述べたいと思います。私たちは、NHibernate(Fluent APIを使用)またはLINQ to SQLのいずれかを絞り込んだり選択したりしました。ASP.NET MVCサイトに適したデータフレームワーク--LINQ to SQLまたはNHibernate

MVCスタイルの開発に最適なフレームワークはどれですか(SOはLINQ to SQLを使用しています)。

SQL Serverをサポートしたい場合、Oracle、MySQL - LINQ to SQLを除外しますか?

+1

mvcテンプレートを含む亜音速3もあります。 –

+0

IQueryableオブジェクトを返さないと、Linq-to-SQLは流暢なAPIになりますか? – Nick

答えて

4

MVCでFluent NHibernateとDependency Injection(私の場合はNinject)を使って大成功を収めました。

成熟したORMはMVCでうまくいくはずですが、私にとってはそうです。 MVC(モデル/ビュー/コントローラ)の性質は3つの問題を分けているので、どのORMも「モデル」の役割にきわめてうまく収まるはずです。

+0

それは私が現在に向かって傾いているスタックです。私が気づくべきであるところには何かがありますか? –

+0

すぐに気になるものはありません。少なくとも、今解決されていないものはありません。私はもともと、MVCコントローラをインジェクションするための独自のモジュールを実装しましたが、現在、公式のNinject実装があります:http://github.com/enkari/ninject.web.mvc/tree/master他のDIフレームワークは、あなたがNinjectと一緒にいなければ同様のモジュールを持っています。あなたのNH設定の複雑さにもよりますが、セッションファクトリを注入する余分な仕事があるかもしれませんが、FNHはそのDSLインターフェイスの性質によってDIと非常によく競合します。 –

+0

Stuart - ASP.NET MVC開発で、あるタイプのデータアクセスフレームワーク/テクノロジが他のものより優先されるのはなぜですか?私は、ASP.NET MVCは、使用されるデータアクセスのタイプについて何の前提もなく(偏りもない)と考えていましたか?モデルのどこかでデータアクセスが行われているので、私がすでに書いていて再利用したいと思っていたデータアクセスコードがあれば、従来のADO.NETを使うことができました。 – Matt

2

LINQ to SQLはSQL Server用です。 Entity Frameworkは他のデータベースもサポートしています。

NHibernateが適しています。データベースのアプリケーションを実行する場合はCastle ActiveRecord(NHの上に構築されています)を使用するか、プロジェクトガイダンスの場合はSharp Architectureを使用します。

1

Entity FrameworkはMVCとうまく統合され、他のデータベースをサポートします。

1

あなたが言及した両方のORMがMVCで動作するという短期間(と有用ではない)の回答です。より長い答えは、モデルオブジェクトでどのように作業したいかを考える必要があるということです。たとえば、ドメインオブジェクトの最初の開発(ドメインドリブンデザインのアプローチ)をしたいのですか、既存のデータベースからデータアクセスレイヤーを生成したい場合は、「データフォーム」アプリケーションを実装していますか?マッピングを指定するのはあなたの好みですか?流暢なインターフェースを使いたいのですか、ファイル(またはドメインオブジェクトの属性)のマッピングに満足していますか?

これらは、ORMを選択する際に調査する必要のある質問のタイプです。これらの質問は、MVCまたはWinformsを使用しているかどうかにほとんど関係ありません。

6

LINQ to SQLから(Fluent)NHibernateに切り替えたばかりの人は、ここにいくつか気づいたことがあります。

  1. LINQ    にSQL参加-サブクラスの同等の操作を行う方法を見つけ出すためにそう時間がかかりました。多くの変更の後、私はどこかでそれが不可能であると読んでいます。すべての列が同じテーブルにある場合にのみ、継承をマップできます。これは、いくつかの列がある場合は素晴らしいですが、私のケースではトンがあり、サブクラスは他のサブクラスの親です。なぜORMのためにそれらをすべて1つのテーブルに入れなければならないのですか?経験から

  2. NHibernateのは(小、迅速なプロジェクトのために、時にはあまり)堅牢されていると、私が生成する可能性があるため、小規模なプロジェクトを通じて、それに精通しているが、私はそれがあまりにも多くのかもしれないと感じた  SQLにLINQ  のルートを行ってきましたDBMLファイルがあり、数分で終了します。

  3. 流行NHibernate。両方の世界のベストを奪います(私の場合)。私は自分の望むやり方をマップして、自分のデータベースを自分の望むやり方にして、ドメインやデータモデルで妥協する必要はありません。また1つの単語:Automapping ...ケーキのアイシング。私はかつて私は限界を発見し、  SQLにLINQ  でいくつかの道路のバンプを打つが、流暢NHibernateは、この選択が容易になり、私はI'LLを考えていない他のORMで行かなければならなかっただろう

仕事をより良くするものがなければ、それを残してください。

ロブ・スコット氏のように、どのようにドメイン=>データ・モデルを抽象化しているのですか?そしてあなたはドメインやデータベースから始めていますか?関係はどれほど複雑ですか?あなたが継承を全く持っているなら、私はより豊かなORMフレームワークに行き、自分自身を悲しみから救うと言うでしょう。

Fluent NHibernateには、私が今までに見つけた最高のドキュメントがいくつかありますが、それほどサポート、メモ、ブログ、リソースがあります。私は24時間以内に立ち上げて走っていました。

ああ、NHibernateの新機能がNHibernate in Actionの本を拾い上げると、ホイールにグリースを塗るのに役立ちますが、そのフレームワークにも多くの助けがあります。

ツールが機能していないことを示す最も良い指標は、ツールを作業する必要があるときです... LINQ  〜  SQLホワイトペーパーを読み込み、あらゆる種類の狂気をカスタマイズしていて、私がテーブルとドメインを変更するように誘惑されたとき、私はFluentに渦を吹かせるように言いました。

あなたに幸運を。長い応答のために申し訳ありません;これは過去5日かかりましたので、私はまだまだ追いついていると思います:-)

+2

これはまさに私が学びたいと思っていた経験です。私はdbではなく、ドメインモデルで考える傾向があります。私たちが内部で構築したORMツールは、継承を複数のテーブルでうまく処理できるように、私はそれを利用できるように慣れています。私の選択が流暢に進んでいるように見える。Hibernateは正しいものだった。 –

+0

5x1llz - ASP.NET MVC開発で、あるタイプのデータアクセスフレームワーク/テクノロジが他のものよりも優先されるのはなぜですか?私は、ASP.NET MVCは、使用されるデータアクセスのタイプについて何の前提もなく(偏りもない)と考えていましたか?モデルのどこかでデータアクセスが行われているので、私がすでに書いていて再利用したいと思っていたデータアクセスコードがあれば、従来のADO.NETを使うことができました。 – Matt

+0

Fluentが現在利用可能な最高のソリューションであることも発見しました。 :) @Matt、MVCは本当に仮定をしませんが、それでもなお、1つのORMは別のものよりも便利です。 – Venemo

0

Entity Frameworkは複雑になります。リポジトリパターンとinversion of controlがコントローラ内にあるFluent NHibernateを使用してください。

NHibernateは多くのことをより簡単にします。私たちは最近、Entity FrameworkからFluent Nhibernateに移行しました。そしてFluent NHibernateは間違いなく優れた候補です。

関連する問題