asp.net mvc3 Code First (Database Singleton)

Работя върху asp.net mvc, като първо използвам код. Забелязах, че след като създам нов контролер, шаблонът на контролера показва отменен метод на dispose, който има само една задача; dispose db променлива, създадена в горната част на този контролер.

Мисля да променя това, за да използвам единичен модел с моя клас DBContext.

Опитах го и работи добре. с изключение на това, че понякога имах нужда от достъп до база данни от global.asax. (понякога) хвърля изключение.

Някой мислил ли е да направи същото? Някакви идеи?

Благодаря ти


person IoC    schedule 09.12.2011    source източник


Отговори (2)


лично аз бих следвал напълно различен подход, вижте отговора ми тук: https://stackoverflow.com/a/7474357/559144 Не бих използвал Singleton и не бих свързал MVC, който е UI рамка с DAL (EF във вашия случай).

относно неизползването на singleton, оставете базата данни да обработва едновременност; това е едно от нещата, които сървърите на бази данни правят най-добре ;-)

person Davide Piras    schedule 09.12.2011

Използваме EF контекст като сингълтън за http контекст. Също така не бих свързал твърдо EF с MVC, но все пак можете да сте сигурни, че всеки http контекст се занимава с един екземпляр на EF контекст чрез използване на инжектиране на зависимости (ние използваме Unity).

Също така имаме достъп до контекста в глобалния asax, за да направим db инициализация и зареждане за разработка. Отново можете да използвате DI контейнер, за да получите екземпляр на EF контекста.

public interface IUnitOfWork : IDisposable
{
    int SaveChanges();
}

public class MyEfContext : DbContext, IUnitOfWork
{
    // your custom context code
}

Използването на жизнен цикъл на единичен на http-контекст за инжектиране на зависимост на IUnitOfWork не е подход, който да помогне за справяне с паралелността в нашия случай. Правим го, защото когато се занимаваме с EF обекти, трябва да се уверим, че всички селекции/вмъквания/актуализации/изтривания винаги се случват с един и същ контекстен екземпляр. EF не ви позволява да прикачвате обекти към множество контексти и поради тази причина използваме сингълтон за http контекст.

person danludwig    schedule 09.12.2011