2013-09-05 4 views
1

В MVC мы создаем DbContext модели какПравильный способ использовать DbContext класс в MVC

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

Но мой вопрос заключается не в том, что таким образом мы создаем несколько DBConnections.

Нет, не беспокойтесь об этом. Entity Framework (или, более конкретно, ADO.NET, от которого это зависит) обрабатывает фактические соединения БД в пуле соединений. Поэтому не путайте DbContext с фактическим DbConnection. Это две совершенно разные вещи.

+0

Только что исправить это –

1

На самом деле, есть стандартный способ для этих типов сценариев ..
Unit Of Work & Generic Repository with Entity Framework 5

Также, пожалуйста, посетите эту должность: Understanding and Implementing Repository and Unit of Work Pattern in ASP.NET MVC Application

я копирую несколько ниже текст из второй ссылки ,

Теперь представьте сценарий, в котором у нас есть несколько таблиц в базе данных . Затем нам нужно создать несколько репозиториев, чтобы сопоставить модель домена с моделью модели . Теперь возникает проблема с множеством репозиториев .

Проблема связана с объектом ObjectContext. Если мы создадим несколько репозиториев , должны ли они содержать их ObjectContext отдельно? Мы знаем, что одновременное использование нескольких экземпляров объекта ObjectContext может быть проблемой, поэтому действительно ли мы должны позволить каждому репозиторию содержать свои собственные экземпляры?

Чтобы решить эту проблему. Почему каждый экземпляр класса Репозитория имеет свой собственный экземпляр объекта ObjectContext. Почему бы не создать экземпляр объекта ObjectContext в некотором центральном месте, а затем передать этот экземпляр классам репозитория всякий раз, когда они создаются. Теперь этот новый класс будет называться UnitOfWork, и этот класс будет , ответственный за создание ObjectContext nstance и передающий все экземпляры репозитория для контроллеров.