2011-11-09 16 views
1

私は数年間Webプログラミングに.NET 2を使用してきました。最近いくつかの新しいプロジェクトに.NET 4を使用することを検討し始めました。Microsoft Entity Framework/Linq to SQLを使用した自己完結したモジュラークラス

私は、SQLへのMicrosoft Entity Framework/Linqの使用方法を学びました。それは基本が非常に簡単になるように見えるし、完全に機能するクラスをまったく一緒にまとめることができます。しかし、今私はもう少しそれをプッシュし始めている、私は周りを回避する方法がわからない問題を見つける。

私に迷惑をかけることの1つは、私が物事を整理する方法を理解していないということです。明らかに私は関連するクラスを名前空間に保持することに慣れており、一般的にこれらの名前空間はデータベースのレイアウトを反映しています(たとえば、名前空間はテーブル名プレフィックスにマップされます)。しかし、EFを使用すると、すべてのクラスが同じ名前空間になければならないようです。私はもちろん、別々の名前空間にいくつかのデータコンテキストを持つことができますが、クラスがもはや互いに関係を持たないため、EFが提供する利点が失われます。私はこれで生きることができますが、私は何かを欠いている必要があるように感じる?

私が気になっているもう一つの問題は、私が自己完結型モジュラークラスを構築することに慣れていることです。これはEFでどうやって可能か理解できません。たとえば、db.SaveChanges()を呼び出すとデータベース全体の変更が保存され、mySingleObject.Save()が呼び出されている場合、これは単純なSave関数を作成する方法を理解できません。あなたがしゃべっている他のオブジェクトの変更を保存するので、やりたいことのように思えます。クラスライブラリの外部からdb.SaveChanges()を呼び出さなければならないことは、私のクラスライブラリの外にあるものは自分のデータがどのように格納されているかの知識を必要とすべきではないので、狂っているように思えます。

私はこの点を見逃しているのですか、私の考え方を変える必要がありますか?

現時点では、私はこれらの問題のためにプロジェクトを進めるのに苦労しています。私は平凡な古いSQLに戻ることを検討しています。 EFには明らかに大きなメリットがあるので、これは残念ですが、私はそれを最大限に活用したいと思います!

答えて

1

私は、すべてのデータベースエンティティを同じ名前空間に保持しなければならないという問題に遭遇したことはありません。とにかくデータベースに関係する名前空間を作成するのは明らかです。私は緊密な結合を導入することをお勧めします。これは、一緒に避けるのが最善です。具体的には、アプリケーションは基礎となるデータストアのスキーマに気を付けるべきではありません。名前空間は、論理エンティティ(つまり、ロギングに関連するすべてのクラス、またはこの場合は永続ストアとのやり取りに関連するすべてのクラス)をグループ化(およびスコープ)するためによく使用されると思います。

あなたの他の懸念も私には根拠がないようです。オブジェクト状態をストアにコミットする場合と、ストアにオブジェクト状態をコミットしたい場合の例を挙げることはできますか? EFはトランザクションを実行するためのメカニズムを提供しています。

一般に、データベース内の行を表す単一クラスのactive record patternは無効になり、リポジトリパターン(previous question,msdn)が使用されています。

+0

あなたの答えをありがとう。私はあなたが両方の点で正しいと確信しています、私は問題は私があまりにも私の思考の方法で設定されていると思う! 名前空間に関しては、データベースのテーブルに関連する「Customer」クラスと「Product」クラスがあります。伝統的に、私はこれらをそれぞれ 'User'名前空間と 'ecommerce'名前空間に入れていたかもしれません。「顧客」と「製品」がエンティティになると、これらは同じ名前空間に入ることが強制されます。これは正しいですか?おそらく、最終的に約50のエンティティがすべて1か所にありますか? – Moo

+0

私のもう一つの点については、以下のように単一の顧客を更新することを期待しています: 'Customer myCustomer = Customer.Get(1); myCustomer.Name = "Fred"; myCustomer.Save(); 'を使用しますが、EFを使用すると、他のエンティティに対しても変更が保存されます。繰り返しますが、明らかに考え方を調整する必要がありますが、EFを使ってどのようにこの機能*を書くべきかを理解しようとしています。 – Moo

関連する問題