2012-03-26 8 views
3

私のアプリケーションでは、リポジトリクラスを持つDALを作成しました。リポジトリは、データコンテキストのような一連のEFクラスを使用します。C#でエンティティデータコンテキストを抽象化する方法

Iは同じリポジトリと複数データコンテキストを使用できるようにするために抽象化を作成したいです。私は(ProductEntitiesは、EFのコンテキストで)コンテキストを初期化するために、次のコードを使用します。

public class ProductRepository : IProductRepository 
{ 
    ?type? _productEntitiesContext; 

    public productRepository() 
    { 
     _productEntitiesContext = new ProductEntities(); 
    } 

    public productRepository(?type? productContext) 
    { 
     _productEntitiesContext = productContext; 
    } 
} 

をしかし、私は_productEntitiesContext(およびproductContext)の種類を知りません。 ProductEntitiesObjectContextを継承します。

抽象化を実現するために私はいつもインターフェイスを使用していますので、それはクラスなのでObjectContextを使用できるかどうかはわかりません。

私の目標が達成可能かどうかは誰でも知っていますか?

答えて

2

これは何か?

public class ProductRepository<T> : IProductRepository where T: new() 
{ 
    T _productEntitiesContext; 

    public productRepository() 
    { 
     _productEntitiesContext = new T(); 
    } 

    public productRepository(T productContext) 
    { 
     _productEntitiesContext = productContext; 
    } 
} 
+0

ありがとうございます。これで、ジェネリック型Tを定義します。IProductRepositoryのようにインターフェースのようなものを定義したいのですが、コンテキストのために定義したいと思います。 – CiccioMiami

1

ないここではハードコーディングProductEntitiesで問題とされるのかわから - ProductRepositoryはとにかく特定の実装の製品のようです。

あなたは、W/Oその上に依存関係を取って自分のリポジトリにProductEntitiesを注入したいなら、あなたは、このようなIProductEntitiesとしてマーカーインターフェイスを作成し、ProductEntitiesが生成されたクラスですがProductEntities

public interface IProductEntities { } 

public partial class ProductEntities : IProductEntities { } 

に覚えていることを実現することができ、あなたはまだそれを部分的に(副次的なものとして、あなたがそれから継承している可能性がある場合はサイドノートとして)追加することができます。 gの切り替え可能なデータコンテキスト。しかし、コンテキストを切り替える必要があるのか​​どうかは疑問ですが、誰が代替実装を提供するのかは不明です。

このようなリポジトリパターンはとにかにデータアクセスを抽象化しているので、このようにしてEFコンテキストを抽象化する際には何の価値も見られません。明日、別のORラッパー(NHibernateなど)を使用する場合は、おそらく他のORマッパーを使用する別のIProductRepository実装を提供することができます。

+1

ありがとう、私はまた、それがコンテキストを抽象化する価値があるかどうか疑問に思っていました。私はインターフェイスがすでに定義されていると思っていました。それはそうではないので、私はそれをそのまま残します – CiccioMiami

1

あなたが作業単位とIoCを考えることができる抽象的な階層を辿っているなら、stackoverflowに関する多くの例があります。 linq-to-sqlの例は、Entityフレームワークにも適用されます。私は、Entityフレームワークを使用していくつかのプロジェクトでこれを実装しました。あなたの興味があれば、以下のリンクで作業単位とIoCについて読む価値があります。

DataContext, Repositories and Unit of Work

http://elegantcode.com/2009/12/15/entity-framework-ef4-generic-repository-and-unit-of-work-prototype/

http://blogs.msdn.com/b/kylemc/archive/2011/08/18/unit-testing-a-wcf-ria-domainservice-part-2-the-repository-pattern.aspx

うまくいけば、このことができます。

関連する問題