This is an old revision of the document!
Под контекстным классом понимается класс, сгенерированный механизмом сборки в LINQ-to-SQL. Этот класс наследуется от DataContext. Его название может быть задано на уровне сайта или контента, либо используется значение по умолчанию - QPDataContext.
Если требуется работать только с одним контекстным классом, то можно использовать экземпляр контекстного класса по умолчанию, доступный как LinqHelper.Context. Он создается при первом запросе к нему и в случае вызова в Web-среде сохраняется на время выполнения текущего Web-запроса. В случае не-Web-приложений экземпляр сохраняется в статическом свойстве класса LinqHelper на все время жизни приложения.
При создании независимого от БД кода следует иметь в виду, что экземпляр контекстного класса, доступный как LinqHelper.Context по умолчанию использует настройки с которыми он был сгенерирован. Сменить эти настройки можно до первого обращения к LinqHelper.Context через изменение статических свойств контекстного класса.
В случае, когда необходимо работать с несколькими контекстными классами можно использовать явный вызов конструктора, но если контекстный класс получены в режиме генерации кода, независимого от БД, то нужно использовать один из статических методов создания:
static QPDataContext Create(string connection, string siteName, MappingSource mappingSource)
static QPDataContext Create(string siteName, MappingSource mappingSource)
static QPDataContext Create(string connection, string siteName)
static QPDataContext Create(string connection)
static QPDataContext Create()
Если какой либо из параметров не задан, то вместо него используются соответствующие статические свойства контекстного класса.
MappingSource обычно получают с помощью статического метода XmlMappingSource.FromXml, в который передается строка с XML-содержимым отображения. Само XML-содержимое можно получить с помощью одного из экземплярных методов класса DBConnector:
string GetDefaultMapFileContents(int site_id)
string GetMapFileContents(int site_id, string fileName)
Файл ищется в папке App_Data заданного сайта. В качестве имени файла по умолчанию используется имя .map-файла основного контекстного класса. Основной контекстный класс либо задан на уровне сайта, либо имеет значение по умолчанию - QPDataContext. Таким образом, если всё по умолчанию, то ищется файл QPDataContext.map. Содержимое файла кэшируется до первого изменения с помощью метода GetCachedFileContents.
Пример:
XmlMappingSource map = XmlMappingSource.FromXml(Cnn.GetDefaultMapFileContents(Cnn.GetSiteId("Sandbox Net"))); XmlMappingSource map2 = XmlMappingSource.FromXml(Cnn.GetMapFileContents(Cnn.GetSiteId("Sandbox Net"), "EventsDataContext.map"));
Позволяют настроить значения по умолчанию, которые потом будут использованы при инстанцировании контекстных классов, в том числе и для LinqHelper.Context перед первым обращением к нему.
Пример изменения статических свойств:
QPDataContext.DefaultXmlMappingSource = XmlMappingSource.FromXml(Cnn.GetDefaultMapFileContents(Cnn.GetSiteId("Sandbox Net 7"))); QPDataContext.DefaultSiteName = "Sandbox Net 7";
Discussion