User Tools

Site Tools


developer:linq:context

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
developer:linq:context [2011/05/05 23:56]
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|дополнительных свойств полей-изображений]]. Контекст необходимо задать у экземпляра сущностного класса перед обращением к дополнительному полю.   - Использование [[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татические свойства контекстного класса =====
developer/linq/context.1304628961.txt.gz · Last modified: 2011/05/05 23:56 by celutp