1

MVC では、次のような Dbcontext モデルを作成します

 public class Model1 : DbContext
    {
        public Model1()
            : base("DefaultConnection")
        {}
        public DbSet<SomeObj> SomeObjSet { get; set; }
    }

//another model

 public class Model2 : DbContext
        {
            public Model2()
                : base("DefaultConnection")
            {}
            public DbSet<SomeObj2> SomeObjSet { get; set; }
        }

次に、次のようなコントローラーを使用します

public class SomeController : Controller
    {
        private Model1 db1 = new Model1();
        private Model2 db2 = new Model2();

        public ActionResult Action1()
        {
            //do sth with Model1 and return
            return View(db1.SomeObjSet.ToList());// 
        }

         public ActionResult Action2()
        {
            //do sth with Model2 and return result
            return View(db2.SomeObjSet.ToList());// 
        }

しかし、私の質問は、このようにして Multiple を作成していることDBConnectionsです。2 つのモデルを 1 つのモデルに結合し、コントローラーごとに専用のモデルを用意する方が適切ですか?

4

2 に答える 2

4

しかし、私の質問は、この方法で複数の DBConnection を作成しているということではありません。

いいえ、気にしないでください。Entity Framework (具体的にはそれが依存する ADO.NET) は、接続プールで実際の DB 接続を処理します。したがって、DbContext と実際の DbConnection を混同しないでください。それらは2つの完全に異なるものです。

于 2013-09-05T11:29:45.743 に答える
1

実際、これらのタイプのシナリオには標準的な方法があります
..Unit Of Work & Generic Repository with Entity Framework 5

また、次の記事も参照してください: ASP.NET MVC アプリケーションでのリポジトリと作業単位パターンの理解と実装

2 番目のリンクから以下のいくつかのテキストをコピーしています。

ここで、データベースに複数のテーブルがあるシナリオを想像してください。次に、ドメイン モデルをデータ モデルにマップするために、複数のリポジトリを作成する必要があります。複数のリポジトリ クラスを使用すると、問題が発生します。

問題は ObjectContext オブジェクトに関するものです。複数のリポジトリを作成する場合、それぞれの ObjectContext を個別に含める必要がありますか? ObjectContext オブジェクトの複数のインスタンスを同時に使用すると問題が発生する可能性があることはわかっていますが、各リポジトリに独自のインスタンスを含めることを本当に許可する必要があるのでしょうか?

この問題を解決するために。各 Repository クラス インスタンスに ObjectContext の独自のインスタンスを持たせる理由。中央の場所に ObjectContext のインスタンスを作成し、インスタンス化されるたびにこのインスタンスをリポジトリ クラスに渡してみませんか。この新しいクラスは UnitOfWork として呼び出され、このクラスは ObjectContext インスタンスを作成し、すべてのリポジトリ インスタンスをコントローラーに引き渡す役割を担います。

于 2013-09-05T11:32:57.467 に答える