Поделиться через


Переопределение значений SPMetal по умолчанию с помощью XML-файла параметров

Дата последнего изменения: 10 марта 2011 г.

Применимо к: SharePoint Foundation 2010

В этой статье описывается использование XML-файла для изменения поведения средства SPMetal по умолчанию в отношении создаваемого им кода, включая списки, типы контента и столбцы, моделируемые им в создаваемом коде.

Справочник по разметке XML, используемой в файле, начинается в статье Схема XML параметров SPMetal.

XML-файл параметров SPMetal

XML-файл параметров SPMetal содержит XML-код, сообщающий средству SPMetal определенные сведения о коде, который оно должно создавать. В частности, в нем указывается, какие списки, типы контента и поля (столбцы) должны моделироваться в коде. Файл передается средству SPMetal в параметре командой строки /parameters. Дополнительные сведения о параметрах командной строки SPMetal см. в статье SPMetal.

Параметры SPMetal по умолчанию

Для SPMetal XML-файл параметров не обязателен. Если файл параметров отсутствует, средство использует правила по умолчанию. Если файл параметров используется, SPMetal использует свои правила по умолчанию кроме случаев, когда в файле параметров явно указано другое. Дополнительные сведения об этих правилах см. в статье Правила создания кода SPMetal по умолчанию.

Изменение поведения по умолчанию

В этом разделе рассказывается об изменении некоторых аспектов поведения SPMetal по умолчанию с помощью кода в XML-файле параметров.

Элемент Web

Элементом верхнего уровня является <Web>. Задайте его атрибут Class, если необходимо использовать имя, отличное от имени, присваиваемого SPMetal по умолчанию производному от DataContext классу, который представляет весь контент веб-сайта. Присвойте его атрибуту AccessModifier значение "Internal", чтобы создаваемый класс относился к категории internal (Friend в Microsoft Visual Basic). Значение по умолчанию Public.

Элемент List

Чтобы изменить способ создания свойства для представления списка в SPMetal, добавьте элемент <List> в качестве дочернего к элементу <Web>. Элемент <List> также можно использовать для принудительного создания в SPMetal класса для списка, который это средство не моделирует по умолчанию, например для скрытого списка. Присвойте его обязательному атрибуту Name значение, равное имени списка.

Если нельзя использовать имя, назначаемое SPMetal по умолчанию для свойства, представляющего список, воспользуйтесь атрибутом Member, чтобы задать другое имя. Например, по умолчанию SPMetal будет использовать "Calendar" в качестве имени свойства для списка "Календарь". Его можно изменить на ScheduledEvents с помощью кода <List Name="Calendar" Member="ScheduledEvents"/>.

Чтобы использовать типы элементов в списке, отличные от назначаемых SPMetal по умолчанию, задайте в параметре Type другой тип. Например, можно создать (в отдельном файле кода) класс, практически полностью повторяющий класс, создаваемый SPMetal в качестве типа элемента списка, за исключением того, что у него будет одно дополнительное изменяемое свойство. Этот класс можно назначить типом элемента списка и включить вызывающий код, который будет выполнять запись в это свойство элементов списка, возвращаемых запросом LINQ.

ПримечаниеПримечание

Не используйте атрибут Type элемента <List> просто для переименования класса, создаваемого SPMetal для типа элемента списка. Для этого следует использовать атрибут Class элемента <ContentType>, дочернего для элемента <List>. См. раздел Элемент ContentTypes ниже.

У элемента <List> может быть два дочерних элемента: <ContentType> и <ExcludeContentType>. Они ведут себя идентично элементам с такими же именами, которые являются дочерними для элемента <Web>, за исключением того, что они применяются к типам контента, областью которых является список, а не весь сайт.

ExcludeList

Добавьте этот дочерний элемент к элементу <Web>, чтобы запретить SPMetal создавать свойство для конкретного списка. Присвойте обязательному атрибуту Name значение, равное имени списка.

ExcludeOtherLists

Добавьте этот дочерний элемент к элементу <Web>, чтобы запретить SPMetal создавать свойства для каких-либо списков, явно не представленных элементами <List>. Нельзя одновременно включать этот элемент и элемент <IncludeHiddenLists>.

IncludeHiddenLists

Добавьте этот дочерний элемент к элементу <Web>, чтобы заставить SPMetal создавать свойства для всех скрытых списков. Нельзя одновременно включать этот элемент и элемент <ExcludeOtherLists>.

Элемент ContentTypes

Чтобы изменить способ создания в SPMetal класса для представления типа контента, добавьте элемент <ContentType> в качестве дочернего к элементу <Web> (или элементу <List>). Элемент <ContentType> также можно добавить, чтобы заставить SPMetal создавать класс для типа контента, не моделируемого этим средством по умолчанию, например, для скрытого типа контента. Присвойте обязательному атрибуту Name элемента <ContentType> значение, равное имени типа контента. (Используйте "Item" в качестве имени базового типа контента SharePoint Foundation.)

Если нельзя использовать имя, назначаемое SPMetal по умолчанию для класса, представляющего тип контента, воспользуйтесь атрибутом Class, чтобы задать другое имя. Например, если на веб-сайте имеется список "Team Members" и в него были добавлены столбцы, то SPMetal по умолчанию создает класс TeamMembersItem, который будет типом для элементов списка, и задает его в качестве параметра типа для свойства EntityList<TEntity>, представляющего список. Имя параметра типа можно изменить на более понятное, например, TeamMember, с помощью следующего кода:

<List Name="Team Members">
    <ContentType Name="Item" Class="TeamMember" />
</List>

Присвойте атрибуту AccessModifier значение "Internal", чтобы создаваемый класс относился к категории internal (Friend в Visual Basic). Значение по умолчанию равно Public. Других параметров нет.

Элемент Column

Добавьте этот дочерний элемент к элементу <ContentType>, чтобы заставить SPMetal создавать свойство, представляющее поле (столбец), который это средство не моделирует по умолчанию, например, скрытое поле. Присвойте обязательному атрибуту Name значение, равное внутреннему имени поля.Если родительский элемент <ContentType> является дочерним для элемента <List>, то также можно использовать элементы <Column>, представляющие поля, присутствующие в списке, но не в самом типе контента, что может случиться, если в список добавляется столбец.

Если нельзя использовать имя, назначаемое SPMetal по умолчанию для свойства, представляющего поле, воспользуйтесь атрибутом Member, чтобы задать другое имя.

Если поле является полем выбора и необходимо, чтобы типом свойства, моделирующего это поле, был String, даже если поле не допускает ввода значений, то присвойте атрибуту Type значение "String". (По умолчанию SPMetal создает объявление класса перечисления с помощью разрешенных значений из определения столбца для любого столбца выбора, который не допускает ввода значений.) Дополнительные сведения о том, как поставщик LINQ to SharePoint сопоставляет типы полей SharePoint Foundation с типами данных Microsoft .NET Framework 3.5, см. в статье Сопоставление типов: от поставщика LINQ to SharePoint к .NET.

Элемент ExcludeColumn

Добавьте этот дочерний элемент к элементу <ContentType>, чтобы запретить SPMetal создавать свойство для конкретного поля (столбца). Задайте обязательному атрибуту Name значение, равное внутреннему имени поля.

Элемент ExcludeOtherColumns

Добавьте этот дочерний элемент к элементу <ContentType>, чтобы запретить SPMetal создавать свойства для каких-либо столбцов, явно не представленных элементами <Column>. Нельзя одновременно включать этот элемент и элемент <IncludeHiddenColumns>.

Элемент IncludeHiddenColumns

Добавьте этот дочерний элемент к элементу <ContentType>, чтобы заставить SPMetal создавать свойства для всех скрытых полей типа контента. Нельзя одновременно включать этот элемент и элемент <ExcludeOtherColumns>.

ExcludeContentType

Добавьте этот дочерний элемент к элементу <Web> (или элементу <List>), чтобы запретить SPMetal создавать класс для конкретного типа контента. Задайте обязательному атрибуту Name значение, равное имени типа контента.

ПримечаниеПримечание

Нельзя запретить создание класса для типа контента, если создаются другие классы типа контента, наследующие от запрещенного класса. Например, если попытаться запретить создание класса для базового неименованного типа контента SharePoint Foundation ("Item") с элементом <ExcludeContentType Name="Item" />, то потребуется добавить элементы <ExcludeContentType /> для каждого класса контента, наследующего от Item.

ExcludeOtherContentTypes

Добавьте этот дочерний элемент к элементу <Web>, чтобы запретить SPMetal создавать классы для каких-либо типов контента, явно не представленных элементами <ContentType>. Нельзя одновременно включать этот элемент и элемент <IncludeHiddenContentTypes>.

IncludeHiddenContentTypes

Добавьте этот дочерний элемент к элементу <Web>, чтобы заставить SPMetal создавать классы для всех скрытых типов контента. Нельзя одновременно включать этот элемент и элемент <ExcludeOtherContentTypes>.

Пример XML-файла параметров SPMetal

<?xml version="1.0" encoding="utf-8"?>
<Web AccessModifier="Internal" xmlns="https://schemas.microsoft.com/SharePoint/2009/spmetal">
  <ContentType Name="Contact" Class="Contact">
    <Column Name="ContId" Member="ContactId" />
    <Column Name="ContactName" Member="ContactName1" />
    <Column Name="Category" Member="Cat" Type="String"/>
    <ExcludeColumn Name="HomeTelephone" />
  </ContentType>
  <ExcludeContentType Name="Order"/>
  <List Name="Team Members" Type="TeamMember">
    <ContentType Name="Item" Class="TeamMember" />
  </List>
</Web>

См. также

Задачи

Практическое руководство. Использование программы SPMetal

Ссылка

SPMetal

Концепции

Схема XML параметров SPMetal

Правила создания кода SPMetal по умолчанию

Сопоставление типов: от поставщика LINQ to SharePoint к .NET