This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
developer:linq:context [2011/05/05 23:55] celutp |
developer:linq:context [2012/06/19 10:32] (current) celutp [Использование XmlMappingSource] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Использование контекстного класса ====== | ====== Использование контекстного класса ====== | ||
- | Под контекстным классом понимается класс, сгенерированный механизмом сборки в LINQ-to-SQL. Этот класс наследуется от DataContext. Его название может быть задано на [[developer:linq:db_mapping|уровне сайта или контента]], либо используется значение по умолчанию - QPDataContext. | + | Под контекстным классом понимается класс, сгенерированный механизмом сборки в LINQ-to-SQL. Этот класс наследуется от //DataContext//. Имя класса может быть задано на [[developer:linq:db_mapping|уровне сайта или контента]], в случае отсутствия используется имя класса по умолчанию - //QPDataContext//. |
===== Экземпляр по умолчанию ===== | ===== Экземпляр по умолчанию ===== | ||
Line 8: | Line 8: | ||
При создании независимого от БД кода следует иметь в виду, что экземпляр контекстного класса, доступный как **LinqHelper.Context** по умолчанию использует настройки с которыми он был сгенерирован. Сменить эти настройки можно до первого обращения к **LinqHelper.Context** через изменение статических свойств контекстного класса. | При создании независимого от БД кода следует иметь в виду, что экземпляр контекстного класса, доступный как **LinqHelper.Context** по умолчанию использует настройки с которыми он был сгенерирован. Сменить эти настройки можно до первого обращения к **LinqHelper.Context** через изменение статических свойств контекстного класса. | ||
+ | |||
+ | Cуществует возможность использования нескольких экземпляров по умолчанию в Web-среде одновременно (если они находятся в разных пространствах имен). Единственное требование: чтобы имена сайтов, с которыми они работают, различались. | ||
===== Явное инстанцирование контекстного класса ===== | ===== Явное инстанцирование контекстного класса ===== | ||
Line 35: | Line 37: | ||
Необходимость задавать внутренний контекст возникает при явном инстанцировании контекстного класса и использовании следующих операций: | Необходимость задавать внутренний контекст возникает при явном инстанцировании контекстного класса и использовании следующих операций: | ||
- | - Добавление новых статей. При этом экземпляр контекстного класса можно передавать прямо в конструкторе сущностного класса: ''EventsArticle event = new EventsArticle(context);''. Важно задать контекст до сохранения статьи. | + | - Добавление новых статей. При этом экземпляр контекстного класса можно передавать прямо в конструкторе сущностного класса. Важно задать контекст до сохранения статьи. |
- Все операции с M2M-полями (свойствами-коллекциями внутри сущностных классов). Контекст необходимо задать у экземпляра сущностного класса перед обращением к его M2M-полю. | - Все операции с M2M-полями (свойствами-коллекциями внутри сущностных классов). Контекст необходимо задать у экземпляра сущностного класса перед обращением к его M2M-полю. | ||
- | - Использование [[дополнительных свойств полей-изображений]]. Контекст необходимо задать у экземпляра сущностного класса перед обращением к дополнительному полю. | + | - Использование [[developer:linq:image|дополнительных свойств полей-изображений]]. Контекст необходимо задать у экземпляра сущностного класса перед обращением к дополнительному полю. |
+ | |||
+ | <code c#> | ||
+ | EventsArticle event = new EventsArticle(context); | ||
+ | </code> | ||
<code c#> | <code c#> | ||
Line 57: | Line 63: | ||
| | ||
- | ===== Получение источника данных для отображения (MappingSource) ===== | + | ===== Использование XmlMappingSource ===== |
- | Источник данных для отображения обычно получают с помощью статического метода **XmlMappingSource.FromXml**, в который передается строка с XML-содержимым отображения. Само XML-содержимое можно получить с помощью одного из экземплярных методов класса DBConnector: | + | Источник данных для отображения обычно получают с помощью статического метода [[http://msdn.microsoft.com/ru-ru/library/system.data.linq.mapping.xmlmappingsource.fromxml.aspx|XmlMappingSource.FromXml]], в который передается строка с XML-содержимым отображения. Само XML-содержимое можно получить с помощью одного из экземплярных методов класса DBConnector: |
- | + | * [[api:dbconnector:mapping#GetMapFileContents|GetMapFileContents]] | |
- | <code c#>string GetDefaultMapFileContents(int site_id)</code> | + | * [[api:dbconnector:mapping#GetDefaultMapFileContents|GetDefaultMapFileContents]] |
- | + | ||
- | <code c#>string GetMapFileContents(int site_id, string fileName)</code> | + | |
- | + | ||
- | В обоих случаях файл ищется в папке //App_Data// заданного сайта. В первом случае название файла не задается, и в папке ищется .map-файл основного контекстного класса. Основной контекстный класс может быть задан на [[developer:linq:db_mapping|уровне сайта]], либо иметь значение по умолчанию - //QPDataContext//. Таким образом, если всё по умолчанию, то ищется файл //QPDataContext.map//. Содержимое файла кэшируется до первого изменения с помощью метода [[api:cache#GetCachedFileContents|GetCachedFileContents]]. | + | |
Пример: | Пример: | ||
Line 72: | Line 74: | ||
XmlMappingSource map2 = XmlMappingSource.FromXml(Cnn.GetMapFileContents(Cnn.GetSiteId("Sandbox Net"), "EventsDataContext.map")); | XmlMappingSource map2 = XmlMappingSource.FromXml(Cnn.GetMapFileContents(Cnn.GetSiteId("Sandbox Net"), "EventsDataContext.map")); | ||
</code> | </code> | ||
+ | |||
===== Cтатические свойства контекстного класса ===== | ===== Cтатические свойства контекстного класса ===== |