2013-05-10 1 views
2

У меня очень быстрый вопрос относительно использования Entity Framework 5. Многие, возможно, знают, почему нам нужно использовать приведенный ниже код. Тем не менее, я хочу разделить эту логику на слои, и я не хочу ссылаться на DLL Entity Framework на моем веб-слое, поэтому в итоге я поставил этот код в статический конструктор моего класса DbContext.Database.SetInitializer() в статическом конструкторе?

Это плохая идея? Будет ли производительность приложения, сделав это?

Database.SetInitializer<DataContext<T>>(null); 

Заранее благодарен, Онам.

ответ

4

Нет никакого удара о производительности, о котором стоит упомянуть. Статический конструктор вызывается один раз для вашего приложения и когда создается экземпляр первого класса. Я делаю это в большинстве приложений и пока не заметил никаких проблем.

Вы также можете вызвать эту линию через статический метод вашего уровня данных без ссылки на EF в сборке вызывающего веб-уровня.

Я считаю, что эта строка только устанавливает внутреннюю ссылку на инициализатор и не делает ничего дорогой. Дорогая работа - обнаружение и построение модели EF - выполняется, когда используется первый экземпляр контекста.

В качестве побочного примечания. Для того чтобы эта дорогостоящая работа в начале приложения могла быть иногда желательной, чтобы иметь задержку в самом начале приложения и избегать ее, когда пользователь запускает первый запрос в заявление. Для принудительной инициализации вы не только установили инициализацию, но и выполнили бы инициализацию, например, так:

Database.SetInitializer<DataContext>(null); 
using (var context = new DataContext()) 
{ 
    context.Database.Initialize(false); 
}