Используя Платформу Объекта с другим SQL Server версии

Представления

Они оценивают данные в таблицах, лежащих в основе определения представления в то время, когда представление запрашивается . Это - логическое представление Ваших таблиц без данных, хранивших где-либо еще.

позитивный аспект представления - то, что оно будет всегда возвращать последние данные Вам . оборотная сторона представления - то, что его производительность зависит от того, насколько хороший избранный оператор представление на основе. Если избранный оператор, используемый представлением, присоединяется ко многим таблицам или использует соединения на основе неиндексированных столбцов, представление могло работать плохо.

Осуществленные представления

Они подобны регулярным представлениям, в этом они - логическое представление Ваших данных (на основе избранного оператора), однако, , базовый набор результата запроса был сохранен к таблице . Позитивный аспект этого - то, что при запросах осуществленного представления, Вы запрашиваете таблицу , которая может также быть индексирована.

, Кроме того, потому что все соединения были разрешены в осуществленное время обновления представления, Вы платите цену соединения однажды (или так часто, как Вы обновляете свое осуществленное представление), а не каждый раз, когда Вы выбираете из осуществленного представления. Кроме того, с включенной перезаписью запроса, Oracle может оптимизировать запрос, который выбирает из источника Вашего осуществленного представления таким способом, которым это вместо этого читает из Вашего осуществленного представления. В ситуациях, где Вы создаете осуществленные представления как формы таблиц-агрегатов, или как копии часто выполняемых запросов, это может значительно ускорить время отклика Вашего приложения конечного пользователя. оборотная сторона, хотя то, что данные Вы возвращаетесь из осуществленного представления, только так же актуальна как в прошлый раз, когда осуществленное представление было обновлено .

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

Осуществленные представления чаще всего используются в организации хранилищ данных / приложения бизнес-аналитики, где запросы больших таблиц фактов с тысячами миллионов строк закончились бы во время отклика запроса, которое привело к неприменимому приложению.

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

5
задан Roy 27 November 2009 в 02:39
поделиться

3 ответа

ОБНОВЛЕНИЕ: Я написал совет в своем блоге в my Tips Series , чтобы рассказать об этом немного подробнее.

-

Как вы уже догадались, ключ к этому - ProviderManifestToken.

EF использует его для определения доступных типов баз данных.

Очевидно, что если часть SSDL (модель хранилища или базы данных) EDMX ссылается на типы, не поддерживаемые в конкретной версии SQL-сервера, вам необходимо изменить не только ProviderManifestToken, но и заменить все ссылки на типы, не поддерживаемые в целевая версия тоже.

Один из подходов к этому - рассматривать часть файла SSDL как что-то, что может быть заменено во время выполнения.

Для этого вам нужно распаковать CSDL / MSL / SSDL в файлы, а не встраивать их в сборку, как это обычно бывает: холст

  • Выберите Свойства
  • Установите «Обработка артефактов метаданных» на «Копировать в выходной каталог»
  • Сборка
  • Теперь вам нужно скопировать файл SSDL (в bin \ debug) и изменить его для работы с SQL2005, заменив ссылки на DateTime2 на DateTime и т. Д.
  • Затем во время выполнения при построении контекста объекта вам нужно вручную создать ConnectionString, указав его на правильный SSDL ...
  • И использовать его следующим образом:

    var connStr = @"metadata=.\model.csdl|.\modelSQL2005.ssdl|.\model.msl;
                  provider=System.Data.SqlClient;
                  provider connection string="
                      Data Source=.\SQLEXPRESS;
                      Initial Catalog=TipsDatabase;
                      Integrated Security=True;
                      MultipleActiveResultSets=True
                  "";
    
    using (var ctx = new MyContext(connStr))
    {
    
    }
    

    Я знаю, что это не идеально, но, по крайней мере, это дает вам работоспособное решение.

    Надеюсь, это поможет

    Alex

    3
    ответ дан 14 December 2019 в 01:10
    поделиться

    Атрибут ProviderManifestToken необходимо изменить вручную. Мастер обновления не сделает этого за вас.

    5
    ответ дан 14 December 2019 в 01:10
    поделиться

    Вы можете попробовать установить режим совместимости вашей базы данных.

    Таким образом, даже если вы используете SQL 2008 Server, база данных будет базой данных SQL Server 2005.

    У меня есть не тестировал это, но теоретически это должно заставить EF думать, что он обращается к базе данных SQL Server 2005.

    0
    ответ дан 14 December 2019 в 01:10
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: