1

.NET のデータ フレームワークを利用したいのですが、それらがどのように機能するかについて少し混乱しており、希望することが可能かどうかわかりません。(私はこれの多くを PHP フレームワークで行ってきたので、.NET でも同じことができることを願っています!) 要するに、ビジネス ロジックをデータベースにとらわれず、ある意味で、データベースにとらわれないようにしたいと考えています。それはまったくのデータベースです。

このようなクエリは私を苛立たせます:

var productNames =
    from p in context.Products
    where seller.SellerID == mySeller.SellerID
    select p.Name;

代わりに、私はやりたい:

var productNames =
    from p in context.Products
    where seller == mySeller
    select p.Name;

要するに、ビジネス ロジックで ID マッピングを気にしないようにしたいのです。これは、一部のテーブルでは、ID に実際の意味があるためです。(私が使用しているテーブルの一部は、別のアプリケーション ドメインからインポートされたものであり、それらの ID を直接操作できるようにする必要がありますが、私自身の型の場合、ID は付随的です。)

この例では些細な点ですが、一般的に、私はオブジェクトの世界で完全に作業できるようになり、基礎となるデータベースの現実について多かれ少なかれ忘れたいと考えています。これは、クラスの等価演算子を定義するだけの問題ですか?

要約すると、どの .NET データ フレームワークが、オブジェクトの世界に対して最もクリーンなデータベースの抽象化を提供してくれるでしょうか?

4

2 に答える 2

5

Products と Sellers の間に関係がある場合 (コード例の中でどの Seller かはわかりません)、EF では p.Seller (または、製品ごとに複数の売り手が存在する場合は p.Sellers) を実行できます。

しかし、それはあなたがやりたいことに役立たないようです。seller == mySellerはまったく明確ではありません。何が平等を決定しますか?通常、同等性を確立するための主キーがあります。そのため、ID を比較することは依然として理にかなっています。さらに、一般的にははるかに効率的です。

別のオプションは、==演算子をオーバーロードすることです。これにより、オペレーターのユーザーには表示されない ID を比較するメソッドを作成できます。ただし、これは SQL に変換できないため、クエリで機能する場合と機能しない場合があります。

于 2012-05-03T16:35:07.780 に答える
3

プロパティを使用せずに単にオブジェクトを比較しようとしている場合は、クラスでEqualsをオーバーライドできます。ただし、これは何が起こっているかのロジックを隠してしまうため、悪い考えです。私はそれに対して強くお勧めします

于 2012-05-03T16:36:40.270 に答える