2009-08-06 2 views
3

私はクライアント側でSilverlightを使用して.NETアプリケーションを作成しています。今、私は、サーバ側に静的なダミーデータを投げ捨て、代わりにデータベースを追加したいというところまで来ました。.NETプロジェクトのデータベースとORMの選択

データベースの場合、ORMのモデルクラスにタグを付けるだけで、データベーステーブルは私のために作られています。以前GroovyとGrailsでいくつかのテストを行ったところ、GORMは円滑な仕事をしたと思っていました。 .Netでデータベースを設定する最良の方法は何ですか?

私を襲った最初のことは、nHibernateを使用することです。私はnHibernateについて何も知らないが、熱狂して多くの人がそれを言いました。しかし、その後、私はADO .Netもまた、フレームワークに組み込まれているORMであることがわかります.. nHibernateはADOを凌駕しますか? LINQとは何が関係していますか?私はそれもORMとして記載されて参照してくださいが、私はLINQがクエリの部分のための多くでしたか? LINQを通じてデータベースを定義することはできますか?

ご意見やご要望をお待ちしております。また、どのデータベースを使用するかについての意見があれば、聞いてみたいと思います。私はMS SQL Serverが最も簡単な選択だと思いますか?

答えて

9

NHibernateはとSilverlight:NHibernateの貢献者の

一つ、Ayende Rahienは、最近、NHibernateはとSilverlightについてa blog post投稿:

を私はNHibernateのとSilverlightについていくつかの質問を得ました。それは実際に答えるのはとても簡単です。

試してみてください。彼らは一緒にならない。実際、彼らは一緒に行くつもりはありません。

SilverlightにはSystem.Data.IDbConnectionがありません.Haibernateにはいくらか重要な役割を果たすと思います。

したがって、おそらくローカルデータベースにアクセスするために、Silverlightアプリケーション内でNHibernateを実行しています。しかし、私はこれがNHibernateとSilverlightについて尋ねるとき、ほとんどの人が実際に気にしていたことではないと思います。彼らは、サーバー上のNHibernateとクライアント上のSilverlightについて知りたい。

これは簡単に答えるだけで、クライアント/サーバーシステムと同じように動作します。すべて同じ規則が適用されます。

NHibernateは、Silverlightクライアントから直接使用する予定がない限り動作します。

NHibernateは:

NHibernateのは素晴らしいORMですが、それはかなり急な学習曲線を持っているので、あなたはNHibernateはを選択した場合、フレームワークを学ぶにいくつかの時間を投資する準備する必要があります。あなたがその投資をするなら、NHibernateが提供する柔軟性と力によって報われるでしょう。

城のActiveRecord:

城のActiveRecordはNHibernateの上に構築され、したがってNHibernateのに非常に類似しているフレームワークです。いくつかの追加の抽象概念が追加されているため、学習曲線が少し減ります。名前が示すように、ActiveRecordパターンで使用するためのビルドであり、ActiveRecord基底クラスを気にしない場合はかなりの機能を提供する基本クラスが含まれています。 SQLへ

LINQ:

LINQ SQLおよびADO.NET Entity Frameworkのには2つのORM、次のとおりです。■に含まれています。ネットフレームワーク。 LINQ to SQLは、Entity Frameworkよりも小さく、シンプルなフレームワークですが、いくつかの優れた機能があり、使い始めるのは簡単です。

Entity Frameworkの:

Entity Frameworkのも同様で始めるのは非常に簡単ですが、それはしかし、バージョン1のままですので、それは、現在のバージョンでは、いくつかの非常に大きな問題があり、次のEntity Frameworkのバージョンは、現在の欠点の多くを改善し、修正します。フレームワークのための

LINQとスキーマ生成:

これらのフレームワークのすべてのクエリ言語としてLINQを使用するためのサポートを持っています。 LINQ to SQLとNHibernateはあなたのドメインクラスとマッピングに基づいてあなたのためのスキーマを生成することができます。 Entity Frameworkはv1でスキーマを生成できませんが、v2でその機能が追加されます。

+0

"今、私は静的なダミーデータをサーバー側に投げ捨て、代わりにデータベースを追加したいという要望に達しました。 - これは彼のSilverlightアプリケーションがまったく変更する必要はなく、彼はただPOCOを返すサーバー側を持っているように聞こえる。私はSilverlightがサーバー側のORMの決定にどのように影響するかについてはわからないため、明らかにすることができたと思います。 – anonymous

+0

はい、私は同意しますが、それはNHibernateとSilverlightについて話すとき完全性について言及する価値があるかもしれません。 –

+0

が合意し、素敵な答えです。 – anonymous

2

.NET RIA Servicesを見ましたか?既存のデータベースのないシステムの場合

What is .NET RIA Services?

.NET RIA Services: From Vision to Architecture

.NET RIA Services Samples

+0

いいえ私は実際にそれについて聞いたことはありません。それをチェックします - ありがとう! – stiank81

+0

私は誤解しているかもしれませんが、.NET RIA ServicesはORMではないため、代わりに使用できるものではありません。 NHibernate。私のプロジェクトでWCFの部分を置き換えて、クライアントとサーバー側を結びつけているようです。正しい? .NET RIA Servicesは確かに、さらに詳しく見ていくようなものです。 – stiank81

2

、私はNHibernateは+ FluentNHibernateのautomappingsショット価値があるだろうと思う:

http://wiki.fluentnhibernate.org/show/AutoMapping

I避難所前にautomappingsを使用していない(私はg使用するスキーマがあれば)、私が最初に調査する考えです。

http://www.castleproject.org/activerecord/index.html

ここでも、このいずれかを使用していないが、私はあなたがマッピングを指定するための属性を使用してエンティティをマーク信じる:証明

2番目の選択肢、そしておそらくより信頼性が/ ActiveRecordのです。

NHibernateはマッピングをデータベースにエクスポートして自動的にテーブルを作成することができます。

これはSilverlightにどのような影響があるかわかりません。答えは


(ここではコメントより入力しやすい)コメントする:

何NHibernateのは、サポートすることは、プロジェクトで定義されたマッピングファイルを取得し、データベースにエクスポートする機能です。これは、スキーマ(アプリケーション)を一度定義することを意味します。

通常、これらのマッピングファイルはxmlです。これは大きな問題ではありませんが、明らかに改善の余地があります。

FluentNHibernateでは、(a)マッピングファイルをコードで定義したり、(b)エンティティからマッピングファイルを自動的に作成することができます。私はdbがひどく、この世界では慣習がないのでメソッド(a)を使用しますが、あなたの使用のために私はオートマッピングすることをお勧めします(b)。上記のwikiリンクは、ProductとShelfのマッピング方法の簡単な例を示しています。

アクティブレコードは、スキーマをXMLではなくエンティティの属性として定義することで機能します。 RoRが使用するActiveRecordパターン(Entity.Saveなど)も実装されているので、これ以上のことです。私はこれを使ったことはありませんが、広く使われています。

NHibernateスキーマ生成に関する素晴らしい点の1つは単体テストです。 SQL Liteで数行のコードでテスト・データベースを作成し、スキーマをエクスポートし、テスト・データを取り込み、テストを実行し、破棄することができます。これは、統合テストを容易にし、クエリが適切に動作することをテストするのにも役立ちます。

私は実際にはNHibernateだけを使用するので、Linq2SQLまたはEFまたは他のORMにはコメントできないので、これらが最良の解決策であるかどうかはわかりません。

+0

他の回答の1つとして、私はこの選択がSilverlightに影響を与えるとは思わないと思います。ActiveRecordとFluentに言及してくれてありがとう - それをチェックします。しかし、NHibernateは自動マッピングをサポートしていましたか?いいえ?あなたはどのようにNHibernateでdb-schemaを定義しますか?手動で作成する必要がありますか? – stiank81

+0

コメントを編集するには投稿が遅すぎます。 – anonymous

0

以前CodeSmithを使用していて、多くのLINQ to SQLコードを自動生成したい場合は、PLINQOを参照してください。

第2に、最小限のトラブルでLINQ to SQLデータアクセスレイヤーを作成できるSubSonicというツールもあります。

これらのツールのいずれかを使用してデータアクセスレイヤを作成すると、Silverlightユーザーインターフェイスからアクセスできるアセンブリが表示されます。

ああ、CodeSmith自体は費用がかかりますが、PLINQOテンプレートとSubSonicジェネレータは自由に使用できます。

あなたのプロジェクトには幸運です。

0

SubSonicについては既に触れましたが、Chrisにお詫び申し上げます。私は、SubSonicがあなたのモデルクラスからgenerate a databaseできることを指摘しておく価値があると思います。あなたはその機能について具体的に尋ねてきたからです。

0

私は絶対にECOを使用します。最大12クラスまで無料で提供し、多くの便利な機能を提供しています。モデルを中心に配置され、OCLを使用してモデル内をナビゲートします。私の意見では、OCLはSQLやLINQよりも使いやすくなっています。例えば

OCLで、この構築された発現:

Person.allinstances.address->select(hasGeoPoint).streetname 

この例では2クラス、人とアドレスがあります。 Personにはアドレスがあり、AddressにはgeoPoint(この場合はbooleanフラグで示されます)とstreetnameを持つことができます。上記の式は、すべての人物の住所からジオポイントを持つすべての街路名をフィルタリングします。

ECOのもう1つの重要な機能は、他の属性の値を計算できるようにする派生属性です(派生する可能性があります)。この値は、最初のクエリからキャッシュされ、CPU時間が節約されます。 ECOは、既存のデータベースからも使用できます。

関連する問題