Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
Название | Описание |
Добавление новых статей | Внимание: необходимо задать контекст до сохранения статьи. Экземпляр контекстного класса можно передавать прямо в конструкторе сущностного класса. |
Все операции с полями «Связь» типа M2M (свойствами-коллекциями внутри сущностных классов) | Контекст необходимо задать у экземпляра сущностного класса перед обращением к его полю «Связь» типа M2M |
Использование дополнительных свойств полей-изображений | Контекст необходимо задать у экземпляра сущностного класса перед обращением к дополнительному полю |
EventsArticle event = new EventsArticle(context);
var item = ctx. TestArticles. Where(n => n. Id == 3737).Single();
var newCat = ctx. TestCategoryArticles. Where(n => n. Id == 1856).Single();
item. InternalDataContext = ctx;
item. Categories. Add(newCat);
bmitChanges();
Если необходимо применение контекста сразу для коллекции объектов, то возможно использование метода, расширяющего IEnumerable<T> (ApplyContext(DataContext context)), определённого для каждого сущностного класса.
foreach (var item in ctx. PhotosArticles. Where(n => n. Photo!= null).ApplyContext(ctx))
{
// use item. PhotoUrl;
}
Использование XmlMappingSource
Источник данных для отображения обычно получают с помощью статического метода XmlMappingSource. FromXml, в который передается строка с XML-содержимым отображения. Само XML-содержимое можно получить с помощью одного из экземплярных методов класса DBConnector:
- GetMapFileContents, GetDefaultMapFileContents.
Пример:
XmlMappingSource map = XmlMappingSource. FromXml(Cnn. GetDefaultMapFileContents(Cnn. GetSiteId("Sandbox Net")));
XmlMappingSource map2 = XmlMappingSource. FromXml(Cnn. GetMapFileContents(Cnn. GetSiteId("Sandbox Net"), "EventsDataContext. map"));
Статические свойства контекстного класса
Статические свойства позволяют настроить значения по умолчанию, которые потом будут использованы при инстанцировании контекстных классов, в том числе и для LinqHelper. Context перед первым обращением к нему.
Свойство DefaultConnectionString
Строка подключения к БД. Инициализируется строкой из раздела connectionStrings конфигурационного файла веб-сайта (web. config). Если значение не задано, то используется значение по умолчанию (qp_database).
Свойство DefaultSiteName
Имя сайта. Инициализируется именем сайта, для которого были сгенерированы классы LINQ to SQL.
Свойство DefaultXmlMappingSource
Инициализируется следующим вызовом:
XmlMappingSource. FromXml(Cnn. GetDefaultMapFileContents(Cnn. GetSiteId("Имя сайта")))
В качестве имени указывается имя сайта, для которого были сгенерированы классы LINQ to SQL.
Пример изменения статических свойств:
QPDataContext. DefaultXmlMappingSource = XmlMappingSource. FromXml(Cnn. GetDefaultMapFileContents(Cnn. GetSiteId("Sandbox Net 7")));
QPDataContext. DefaultSiteName = "Sandbox Net 7";
В классах LINQ to SQL, генерируемых QP, в отличие от стандартных классов LINQ to SQL, существует поддержка «Связь» типа M2M. Они доступны в двух интерфейсах:
- поле-коллекция в сущностном классе, которая состоит из экземпляров связанного сущностного класса; класс, представляющий узловую таблицу.
Первый интерфейс обычно используется для простых выборок, добавления, удаления связанных статей. Второй интерфейс – для сложных выборок, а именно для фильтрации по полю «Связь» типа M2M на уровне SQL.
При написании LINQ-запроса с фильтрацией по полю «Связь» типа M2M на уровне SQL следует использовать следующий алгоритм:
- начать с узловой сущности, выполнить фильтрацию по одной связанной сущности, сделать проекцию по второй связанной сущности.
Пример:
IQueryable<Article> art = ctx. ArticlesCategories. Where(n => n. Category. Title == "main").Select(m => m. Article);
Поддержка стандартного поведения объекта «Publishing Container»Фильтрация статей по умолчанию
По умолчанию фильтрация статей выполняется следующим образом:
- в Live-режиме выводятся статьи, которые:
- видимы (VISIBLE = 1, флаг управляется расписанием видимости статьи); не находятся в Архиве статей (ARCHIVE = 0); имеют максимальный статус Workflow (если STATUS_TYPE_ID = ID статуса Published текущего сайта (в большинстве Workflow) или если Workflow не назначен);
- В Stage-режиме применяются только первые два условия.
В текущей версии QP данное поведение для классов LINQ to SQL настраивается через включение опции «Использовать фильтрацию по умолчанию» в свойствах контента. При включённой опции LINQ-класс отображается не на таблицу CONTENT_NNN, а на представление CONTENT_NNN_LIVE (для Stage-режима используется аналогичное представление CONTENT_NNN_STAGE вместо CONTENT_NNN_UNITED).
Примечание: в предыдущих версиях продукта реализовывалось через вызов метода расширения ForFrontEnd(). В текущей версии метод оставлен для обратной совместимости, но в случае включённой опции никаких действий не выполняет.
Примечание: единственное отличие от объекта «Publishing Container» в том, что фильтрация по статусу всегда осуществляется по системному статусу Published. Таким образом не поддерживаются Workflow, у которых максимальный статус не равен Published.
Если генерируемые классы LINQ to SQL не используются непосредственно на веб-сайте из директории App_Code, а сначала включаются в проект в Visual Studio, то для организации работы веб-сайта в Live - и Stage-режимах целесообразно воспользоваться режимом генерации, независимым от БД (настраивается в свойствах сайта). В этом случае один и тот же код можно использовать и в Live-, и в Stage-режиме, отличие будет только в содержимом MAP-файла привязки. При такой организации кода для Stage-режима потребуется задать isLive = false в секции appSettings конфигурационного файла веб-сайта (web. config).
Примечание: для Live-режима параметр isLive должен быть либо не задан, либо равен true.
Поддержка служебных полей контентаВ любом сгенерированном сущностном классе есть постоянный набор служебных полей:
Название | Тип | Описание |
Id | int | Идентификатор статьи. Изменения данного поля не сохраняются в БД, значение выставляется сервером автоматически. |
StatusTypeId | int | ID статуса статьи. Изменения данного поля сохраняются в БД. |
StatusType | StatusType | Статус статьи. Изменения данного поля сохраняются в БД. |
Visible | bool | Флаг, определяющий видимость статьи. Для возможности работы с разными значениями данного поля необходимо отключить фильтрацию по умолчанию на уровне контента. Изменения данного поля сохраняются в БД. |
Archive | bool | Флаг, определяющий нахождение статьи в архиве статей. Для возможности работы с разными значениями данного поля необходимо отключить фильтрацию по умолчанию на уровне контента. Изменения данного поля сохраняются в БД. |
Created | DateTime | Дата создания статьи. Изменения данного поля не сохраняются в БД, значение выставляется сервером автоматически. |
Modified | DateTime | Дата последней модификации статьи. Изменения данного поля не сохраняются в БД, значение выставляется сервером автоматически. |
LastModifiedBy | int | Пользователь, последним модифицировавший статью. Изменения данного поля не сохраняются в БД. Модификации статей из классов LINQ to SQL выполняются от имени пользователя по умолчанию (администратора). |
Дополнительные свойства позволяют более удобно работать с полями типа «Изображение» и «Динамическое изображение» без прямого обращения к QP8 API. Названия свойств генерируются из названия поля изображения путём добавления к ним следующих значений:
Название | Описание |
*Url | Возвращает URL файла изображения. |
*Path | Возвращает физический путь к файлу изображения. Может использоваться при сохранении. |
У класса DBConnector существует обобщённый экземплярный метод GetCachedEntity.
public T GetCachedEntity<T>(string key, Func<T> fillAction)
public T GetCachedEntity<T>(string key, Func<string, T> fillAction)
public T GetCachedEntity<T>(string key, double cacheInterval, Func<T> fillAction)
public T GetCachedEntity<T>(string key, double cacheInterval, Func<string, T> fillAction)
Если требуется закэшировать коллекцию объектов, полученных с помощью LINQ to SQL, то её сначала нужно сделать вещественной с помощью любого из методов:
ToList, ToArray, ToDictionary.Пример использования:
DBConnector cnn = new DBConnector();
List<Banner> banners = cnn. GetCachedEntity<List<Banner>>(pageAddress, 10, GetPageBanners);
В примере GetPageBanners – метод, возвращающий List<Banner>, который будет вызван только при заполнении кэша. Метод может быть определён как без параметров, так и с единственным строковым параметром. Во втором случае в метод будет передано значение ключа (параметр key).
Использование классов LINQ to SQL при создании компонентовПод компонентами в данном случае понимаются небольшие обладающие определённой функциональностью части, которые могут быть повторно использованы. Каждая из этих частей обычно использует в качестве источника данных несколько связанных контентов, а значит может быть построена на основе группы классов LINQ to SQL, которые генерируются для этих контентов. Поскольку классы LINQ to SQL, используемые в компонентах, должны быть переносимыми, их нужно создавать только при включённой в свойствах сайта опции «Выполнять генерацию, независимую от БД».
|
Из за большого объема этот материал размещен на нескольких страницах:
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 |


