«Для меня не имеет смысла использовать пользовательские запросы, тогда почему я использую Entity Framework?» Для скорости конечно! вы уничтожаете другой слой, сохраняя полезные объекты в коде. Больше о том, что нет необходимости писать валидацию и заполнять поля в объекте, разбирать строки и тому подобное.
ема уже широко обсуждается на stackoverflow и во многих других блогах. Причина, по которой я задаю этот вопрос, заключается в том, что я наблюдаю, что эта тема обсуждалась в основном в сообщениях от 3 до 5 лет, в то время как сейчас у нас есть версия EF 6.2, и я ожидаю, что в ней уже могут быть обновления ( Есть и другие причины, которые вы найдете под вопросом.
У моего приложения есть как минимум 25 моделей (таблиц) с MySQL в качестве базы данных, модели и отношения настроены в OnModelCreating, веб-сайт размещен на godaddy, и у меня нет хорошего доступа к настройкам IIS и т. Д.
Время загрузки страницы
Загрузка первой страницы: от 65 до 70 секундЗагрузка второй страницы: от 1 до 3 секундПосле 10-минутной задержки загрузка страницы займет 70 секунд. Обратите внимание, что я протестировал его в разных средах, например, с использованием другого подключения к Интернету. На странице нет изображений, и на тестовой странице есть только 5 строк данных с двумя столбцами (вызывая простой метод db.Test.ToList ();)
При поиске в интернете я обнаружил, что это общая проблема с EF, поэтому я попытался исправить ее, получая помощь от постов.3 шага для быстрого EntityFramework а такжеПредварительно сгенерированный кеш модели и представления
После этого исправления
Загрузка первой страницы: от 64 до 67 секундЗагрузка второй страницы: от 1 до 3 секунд
// DbConfiguration constructor
public MyDbConfiguration
{
var path = Path.GetDirectoryName(this.GetType().Assembly.Location);
SetModelStore(new DefaultDbModelStore(path));
}
// DbContext
private static DbMappingViewCacheFactory viewCacheFactory;
private static DbMappingViewCacheFactory ViewCacheFactory
{
get
{
if (viewCacheFactory == null)
{
var path =ConfigurationManager.AppSettings[GlobalContextConfig.EFCacheFolder];
viewCacheFactory=new FileViewCacheFactory(path+"Budget.Context.MyDbContext.xml");
}
return viewCacheFactory;
}
}
public MyDbContext()
: base("name=MySqlConnectionString")
{
// In case i need to update xml for now i delete the old file manually
InteractiveViews.SetViewCacheFactory(this, ViewCacheFactory);
Database.SetInitializer<MyDbContext>(null);
this.Configuration.ProxyCreationEnabled = false;
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.AutoDetectChangesEnabled = false;
this.Configuration.ValidateOnSaveEnabled = false;
}
Он был улучшен, но не достаточно, я хочу знать, были ли обновлены эти проблемы в EF 6.2.0 или изменился метод исправления, или что-то, что я делаю неправильно, следует проверить.
Я также установил EF 6.1.X и сгенерировал представления, щелкнув правой кнопкой мыши файл Contaxt и выбрав Entity Framework> Generate View в руководстве.
Результаты:
Загрузка первой страницы: от 40 до 50 секундЗагрузка второй страницы: от 0 до 1,5 секундЭто довольно удивительно, EF 6.1.X намного быстрее, чем EF 6.2
Сборка и развертывание в виде пакета Release с debug = false
В целях тестирования я также загрузил приложение asp.net без Entity Framework, загрузка в первый раз занимает от 8 до 13 секунд, а вторая загрузка занимает менее 1 секунды.