0

ここでベストプラクティスに関するアドバイスを本当に探しているので、状況を説明します。複雑なデータベースを使用して、POCO と EF 4 の上に構築されたかなり大規模なアプリケーションがあります。私たちは Entity Framework に満足していますが、たとえば次のシナリオ (非常に単純化されています) では、明らかにパフォーマンスが向上する可能性があります。

お気に入りに追加したユーザーのコレクションと、ユーザーによる評価 (1 - 5) のコレクションを含む News というテーブルがあります。たとえば、次のようになります。

public class News
{
   public virtual int NewsId;
   public virtual string Title;
   .......etc....

   public virtual ICollection<User> UserFavourites { get; set; }
   public virtual ICollection<Rating> Ratings { get; set; }
}

ユーザーのニュースを返すストアド プロシージャを作成し、EF を使用して構築するのではなく、ニュースがお気に入りであるかどうか、データを要求しているユーザーによって既に評価されているかどうか、およびニュースの現在の評価を返すことができるようにしました。 ICollections からのこのデータで、以下のようなオブジェクトになります。

public class NewsDataModel
{
   public int NewsId;
   public string Title;
   .......etc....

   public bool IsFavourite { get; set; }
   public bool IsRated { get; set; }
   public double Rating { get; set; }
}

ストアド プロシージャははるかに高速であり、単一のデータベース ヒットは複数の呼び出しである可能性がある遅延読み込みを使用した EF よりも優れていますが、sproc によって返されるデータは上記のニュースの POCO クラスと一致しません。

エンティティ フレームワーク関連のクラス、またはストアド プロシージャと ADO.NET を取り込んでいるカスタム DataModel クラスのいずれかを返すことができる INewsRepository があるため、これを進める最善の方法を試してみました。これは正しくないと感じます。複数のテーブルから構築されたデータを含む単一のオブジェクトが必要な場合、エンティティ フレームワークよりも sproc を使用するとはるかに高速になるこれらのシナリオを処理する最善の方法について、他の経験からのアドバイスや洞察をいただければ幸いです。遅延読み込みを有効にして呼び出します。

助けてくれてありがとう

4

1 に答える 1

0

のインスタンスを返すリポジトリの新しいメソッドに問題はありません。これは、ニュース情報から構築されたデータ クラスであるためNewsDataModel、まだスコープ内にあります。INewsRepositoryそうしないと、定義したすべてのデータ モデルのリポジトリが作成されます。

于 2012-07-29T16:44:42.467 に答える