Пользовательский файл отображения это xml-файл, на основании которого осуществляется генерация LINQ-to-SQL классов. Он называется Mapping.xml и должен находиться в папке App_Data. Генерация LINQ-to-SQL классов в этом режиме осуществляется только при сброшенной опции Использовать прямое отображение из базы данных (Use direct mapping from database) на уровне сайта.
В текущей версии файл Mapping.xml вообще не генерируется автоматически. Вместо этого всегда генерируется пользовательский файл отображения по умолчанию DefaultMapping.xml, на основе которого должен быть вручную составлен файл Mapping.xml. В простейшем случае можно просто переименовать DefaultMapping.xml в Mapping.xml. Первичная автоматическая генерация mapping.xml была убрана из-за возможности случайной генерации LINQ-to-SQL классов на ненастроенном сайте, что могло привести к его неработоспособности.
При ручном создании файла отображения, в нем задается только необходимая информация. Вся дополнительная информация, которая нужна для генерации классов, подгружается из БД. При этом классы и свойства генерируются только для тех контентов и полей, которые описаны в пользовательском файле отображения.
При автоматической генерации пользовательского файла отображения по умолчанию корректные идентификаторы .NET создаются по следующим правилам:
<?xml version="1.0" encoding="utf-8" ?> <schema connectionStringName="qp_database" replaceUrls="true" useLongUrls="true"> <content name="Event Category" mapped_name="Category" plural_mapped_name="Categories"> <attribute name="Title" /> </content> <content name="Events" mapped_name="Event" plural_mapped_name="Events" use_default_filtration="false"> <attribute name="Title" /> <attribute name="Category" /> <attribute name="Category 2" mapped_name="SecondCategory" mapped_back_name="EventsBySecondCategory" /> <attribute name="Location" /> <attribute name="Date" /> <attribute name="Event Description" mapped_name="Description" /> <attribute name="Many" /> <attribute name="Related Event" mapped_name="RelatedEvent" /> <attribute name="SubEvents" /> <attribute name="InLive" /> <attribute name="SubTitle" /> </content> <content name="Event Location" mapped_name="Location" plural_mapped_name="Locations"> <attribute name="Title" /> </content> <content name="Photos" mapped_name="Photo" plural_mapped_name="Photos"> <attribute name="Name" /> <attribute name="Description" /> <attribute name="OwnerID" /> <attribute name="Photo" mapped_name="Picture" /> </content> <link id="17" mapped_name="RelatedEvent" plural_mapped_name="RelatedEvents" /> </schema>
Корневой элемент файла отображения. Отображение может быть настроено через базу данных на уровне сайта в секции Параметры сборки в LINQ-классы _(LINQ Assembling Parameters). При ручной настройке отображения конкретный сайт указывать не требуется, так как его идентификатор будет передан в процессе сборки.
Название строки соединения в файле web.config сайта. Аналог в базе данных: поле Имя строки подключения (Connection string name). По умолчанию - qp_database.
Включает замену плейсхолдеров <%=site_url%>
и <%=upload_url%>
для полей типа String, VisualEdit и Textbox. Замена работает в обе стороны, как при загрузке, так и при сохранении. Эта опция позволяет LINQ-классам поддерживать стандартное поведение Publishing Container'ов. Аналог в базе данных: опция Заменять URL'ы (Replace URLs).
Установка атрибута модифицирует поведение механизма замены плейсхолдеров (опция replaceUrls) так, что они будут заменяться на абсолютные URL, а не на относительные. Аналогичная опция есть для Publishing Container'ов. Аналог в базе данных: опция Использовать длинные URL'ы (Use long URLs).
Пространство имен, в котором будут сгенерированы LINQ-классы. По умолчанию - пустое. Аналог в базе данных: поле Пространство имен для генерируемых классов (Namespace for generated classes).
Имя контекстного класса. По умолчанию - QPDataContext. Аналог в базе данных: поле Имя контекстного класса (Context Class Name).
Соответствует контенту QP7. При настройке отображения через базу данных соответствующие опции задаются на уровне контента в секции Параметры отображения в LINQ-классы (LINQ Mapping Parameters).
Если какой-либо контент не задан в отображении, то генерация класса для него проводится не будет (Аналог в базе данных: выключенная опция Отображать как класс (Map as class)).
Имя контента в QP7. По этому полю осуществляется поиск соответствия между отображением и БД. Если название контента(поля) в БД является недопустимым идентификатором в .NET, то необходимо задать атрибуты mapped_name и plural_mapped_name.
Отображаемое имя контента (единственное число). Используется как название класса. Аналог в базе данных: поле Имя (единственное) (Name (singular)).
Отображаемое имя контента (множественное число). Используется при генерации ссылок на контент. Аналог в базе данных: поле Имя (множественное) (Name (plural)).
Поддержка стандартного поведения Publishing Container. Необходимо для того, чтобы работали расписание публицкации, workflow, архив. В предыдущих версиях реализовалось через вызов метода расширения ForFrontEnd(). В текущей версии метод оставлен для обратной совместимости, но в случае включенной фильтрации по умолчанию никаких действий не выполняет. При включенной опции LINQ-класс отображается не на таблицу CONTENT_NNN, а на представление CONTENT_NNN_LIVE (для stage-режима используется аналогичное представление CONTENT_NNN_STAGE вместо CONTENT_NNN_UNITED). Аналог в базе данных: опция Использовать фильтрацию по умолчанию (Use default filtration).
Соответствует полю контента QP7. При настройке отображения через базу данных соответствующие опции задаются на уровне поля. Если какое-либо поле не задано в отображении, то генерация свойства для него проводится не будет (Аналог в базе данных: выключенная опция Отображать как LINQ-свойство (Map as LINQ Property)).
Имя поля в QP7. По этому полю осуществляется поиск соответствия между отображением и БД. Если название контента(поля) в БД является недопустимым идентификатором в .NET, то необходимо задать атрибут mapped_name. Кроме того, изменение имени при отображении поля может понадобиться, чтобы исключить конфликт имен между полем и контентом.
Отображаемое имя поля. Используется как имя свойства в LINQ-классе. Аналог в базе данных: поле Имя LINQ-свойства (LINQ Property Name)
Имя обратного LINQ-свойства. Используется только для полей типа Связь один-ко-многим, так как для полей типа Связь многие-ко-многим обратное поле может задаваться явно (как поле контента). Аналог в базе данных: поле Имя обратного LINQ-свойства (LINQ Back Property Name)
Соответствует связи в QP7 (связь создается для поля типа Связь многие-ко-многим). При настройке отображения через базу данных соответствующие опции задаются на уровне одного из соответствующих полей. Если какая-либо связь не задана в отображении и не используется полями многие-ко-многим, то генерация класса для него проводится не будет (Аналог в базе данных: выключенная опция Отображать узловую таблицу как класс (Map Junction Table as Class). Если связь не задана в отображении, но используется полями, то будет сгенерирован класс с именем по умолчанию.
Идентификатор связи (таблица CONTENT_TO_CONTENT). По этому полю осуществляется поиск соответствия между отображением и БД.
Аналог в базе данных: поле Имя узлового LINQ-класса (единственное) (LINQ Junction Class Name (singular))
Аналог в базе данных: поле Имя узлового LINQ-класса (множественное) (LINQ Junction Class Name (plural))