Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Для выделения нескольких сущностных классов в одну группу нужно у нескольких контентов задать одинаковое значение в поле «Имя дополнительного контекстного класса». В качестве значения нужно указывать полное имя класса с учетом пространств имён. Таким образом, один и тот же контент может участвовать в двух контекстных классах:

основном, задаваемом на уровне сайта; дополнительном, задаваемом на уровне контентов.

Примечание: для предотвращения конфликта имён пространства имён для всех генерируемых контекстных классов (как основного, так и дополнительных) должны различаться.

При использовании компонента, использующего классы LINQ to SQL, для сайта необходимо:

Название

Описание

Воссоздать структуру контентов

Также должны быть восстановлены данные об отображении в классы LINQ to SQL и значения свойств.

Сгенерировать. map-файл привязки классов

Так как классы генерировать не надо, то в свойствах сайта можно установить опцию «Генерировать только. map-файл».

Основные ошибки использования классов LINQ to SQL
    Многократное выполнение одних и тех же запросов без необходимости. Отсутствие понимания, что выполняется на веб-сервере, а что – на сервере СУБД. Получение от SQL-сервера лишних данных (аналог в SQL – select *), когда можно обойтись ограниченным набором полей с помощью select new. В конце цепочки операций LINQ в большинстве случаев желательно явно овеществлять результат (например, с помощью ToList()). Результат должен быть не IQueryable<T>, а IEnumerable<T> или T, иначе последующий foreach может привести к новому SQL-запросу на каждой итерации.
Пример использования

Добавление статьи:

НЕ нашли? Не то? Что вы ищете?

NewsArticle art = new NewsArticle();
art. Title = "some title";
art. Text = "some text";
LinqHelper. Context. NewsArticles. InsertOnSubmit(art);
LinqHelper. bmitChanges();

Настройка LINQ to SQL

Внимание: программа SQLMetal не входит в дистрибутив продукта.

В конфигурационный файл QP нужно добавить параметр SqlMetalPath, в качестве значения задать путь к программе SQLMetal (отвечает за генерацию SQL-классов). Программа устанавливается вместе с Visual Studio, путь к ней может выглядеть так: C:\Program Files\Microsoft SDKs\Windows\vn. nn\bin\sqlmetal. exe. Также программа доступна к составе Windows SDK.

Примечание: если в конфигурационном файле QP отсутствует параметр SqlMetalPath, то при генерации данных используется T4-шаблон.

Лог ошибок утилиты SQLMetal пишется в файл sqlmetal. log в директории App_Data. Ошибки обычно связаны с конфликтами имён.

Пользователю ОС, под которым запущен Application Pool (обычно это NETWORK SERVICE) необходимо дать право доступа «Modify» на директории:

App_Code (требуется для возможности генерации файлов классов), App_Data (для генерации промежуточных файлов отображений).

В конфигурационный файл веб-сайта необходимо добавить ссылки на необходимые сборки:

<system. web>

       <compilation>

               <assemblies>

...

                       <add assembly="System. Data. Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />

                       <add assembly="System. Data. DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />

                       <add assembly="System. Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />

               </assemblies>

...

       </compilation>

</system. web>

...

  <system. codedom>

  <compilers>

  <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft. CSharp. CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

  <providerOption name="CompilerVersion" value="v3.5" />

  <providerOption name="WarnAsError" value="false" />

  </compiler>

  </compilers>

  </system. codedom>


Использование Entity Framework

В QP поддерживается работа с контентами с использованием Entity Framework (версии 6.0 и выше). Реализованы доступы на чтение и запись.

Для работы с Entity Framework требуется установить следующие NuGet-пакеты:

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

Примечание: поддержка асинхронной записи отсутствует в текущей версии продукта.

    Поддержка локализации. Быстрая (по сравнению с LINQ) запись за счёт группового обновления данных. Использование отдельных развязочных таблиц для связей M2M (вместо Views, обращающихся к единой таблице). Поддерживаются обратные (в том числе несимметричные) связи М2М для сценариев расщепления статей. Для связей можно не создавать в модели обратные свойства (например, на сущность «Регион» могут ссылаться несколько контентов, а «Регион» может не ссылаться ни на кого). В модель добавлены системные сущности:
      User, UserGroup, StatusType.
    Возможна одновременная работа в режимах Live, Stage. Для пагинации используется синтаксис SQL2012 (OFFSET, а не row number).
Принципы работы
    Генерация всех необходимых классов и интерфейсов осуществляется в Visual Studio автоматически с помощью T4-шаблона. Используется подход POCO. Классы используют EF 6. Сгенерированное сопоставление (mapping) использует EF Fluent API. Процесс генерации настраивается с помощью отдельного файла конфигурации.

Рисунок 12. Структура решения в Visual Studio.

Рисунок 13. Пример содержимого для файла конфигурации.

Выборочная загрузка полей

Некоторые поля можно выделять в отдельные сущности.

Рисунок 14. Выделение поля в отдельную сущность.

Загрузка значений может быть «ленивой» или явной с использованием Include<T, TP>(…):

var included = m. Settings

  .Include(x => x. Text)

  .Where(z => z. Text. Value. Length > 10)

  .FirstOrDefault();

Assert. IsNotNull(included. Text);

Assert. IsTrue(included. Text. Value. Length > 10);

Подходы к локализации

Селективное сопоставление

    Используется конвенция именования полей. В класс не попадают поля других языков. Региональный стандарт (англ. «locale») указывается при создании экземпляра контекста. Сопоставление с полем требуемого регионального стандарта осуществляется в среде выполнения (англ. «runtime»). Подходит для сценариев чтения. Поддерживается добавление нового регионального стандарта без повторной компиляции.

Рисунок 15. Сопоставление с полем требуемого регионального стандарта.

Установка нужного значения во время материализации сущностей

В модель включаются поля из других используемых региональных стандартов:

<?xml version="1.0" encoding="utf-8" ?>

<settings>

...

  <Localization>

  <UseSelectiveMappings>true</UseSelectiveMappings>

  <Pattern>{fieldName}_{cultureAlias}</Pattern>

  ...

  <CaseSensitive>true</CaseSensitive>

  <CultureMappings>

  <!--default-->

  <Map cultureAlias="" to="ru-ru" />

  <!--US english-->

  <Map cultureAlias="EN" to="en-us" />

  <Map cultureAlias="ENU" to="en-us" />

  <Map cultureAlias="TAT" to="ru-tt" />
  </CultureMappings>

  </Localization>

</settings>

Обратные свойства для поля «Связь» типа М2М

В случае использования LINQ to SQL возможно возникновение ситуации с некорректное чтением при расщеплении сущности. Например, если экземпляр «Регион1» сущности «Регион» расщеплён и привязан к экземпляру «Тариф1» сущности «Тариф»:

    в режиме Stage у загруженного из БД «Тариф1» не будет указана связь с «Регион1», в режиме Live все связи будут присутствовать.

Рисунок 16. Связь сущностей (прямое представление).

Эта проблема решается добавлением дополнительного представления (англ. «View») для обратного поля. Шаблон EF позволяет генерировать сопоставление с использованием обратного представления.

По умолчанию обратные представления не используются. Для включения опции в свойствах поля «Связь» типа M2M требуется активировать свойство «Использовать отдельные обратные представления» (Use separate reverse views).

Рисунок 17. Прямое и обратное представления.

Порядок использования

Получение файлов сопоставления и шаблона

В результате сборки контентов (пункт «Собрать контенты» (Assemble contents) в контекстном меню сайта) QP8 генерирует файл с описанием структуры данных контентов выбранного сайта. Формат имени файла – Имя контекстного классаMappingResult. xml. Полученный файл следует добавить в проект в Visual Studio.

Примечание: в качестве имени контекстного класса по умолчанию используется значение QPDataContext (см. свойство «Имя контекстного класса» в разделе Параметры сборки в LINQ-классы (LINQ Assembling Parameters)).

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36