1

EF5 を使用するコンテキストで問題が発生しています。私はまだ問題を研究していますが、同じオブジェクトを別のエンティティ リポジトリで使用するために、DataContext クラスをシングルトン パターンで実装することをお勧めします。自殺ですか、それとも意味がありますか?もう 1 つのアイデアは、次のような ContextManager を実装することです。まだ深くは理解していません)。

どう思いますか?

- 編集 -

Web アプリケーションでは、管理する必要があるエンティティごとにリポジトリを実装しています

public DataContext : DbContext
{
    //...
}

解決策 1 : 問題ありませんが、1 回の呼び出しで複数のアクション (挿入と削除) を実行する必要がある場合は、db を 2 回呼び出すことになると思います。

public Entity1Repository
{
    public void Add(Entity1 entity)
    {
        using(DataContext context = new DataContext())
        {
            context.Entity1.Add(entity);
            context.SaveChanges();
        }
    }
    public void Delete(Entity1 entity)
    {
        using(DataContext context = new DataContext())
        {
            context.Entity1.Remove(entity);
            context.SaveChanges();
        }
    }
}

解決策 2 : この場合、db への呼び出しは 1 回だけだと思いますが、Dispose() を呼び出すことを覚えておく必要があります。

public Entity1Repository
{
    private DataContext context;

    public void Add(Entity1 entity)
    {
        context.Entity1.Add(entity);
    }

    public void Save() 
    {
        context.SaveChanges();
    }

    public void Dispose()
    {
        context.Dispose();
    }
}

最適な実装はどれですか? (私が正しく理解していれば、シングルトンは良いものではありません)

4

1 に答える 1

0

コンストラクター注入 (依存性注入) を介して dbcontext を共有することをお勧めします。

次に、IoC を使用して、リクエストごとに有効期間を持つコンテキストをコンテナーに挿入します。そのため、Web の各リクエストに対して dbcontext が作成され、そのリクエスト中に各リポジトリと共有され、リクエスト後に破棄されます。

Mark seemann は、依存性注入と例に関する素晴らしい本を持っています。 http://www.manning.com/seemann/

これが開始に役立つことを願っています。

于 2013-04-28T13:14:21.050 に答える