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


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

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

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

В этой статье
Класс, представляющий веб-сайт
Свойства, представляющие списки
Классы, представляющие типы контента
Свойства, представляющие столбцы списка
Перечисления и классы, которые представляют параметры для поля Choice или MultiChoice
Поля EntityRef<T>, EntitySet<T> и LookupList<T>, представляющие отношения со списком подстановки

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

Правила, отмеченные в следующих разделах звездочкой (*), переопределить нельзя.

Любое правило, которое можно переопределить, сопровождается указанием XML-кода для переопределения.

Класс, представляющий веб-сайт

  • *Один класс, производный от класса DataContext, создается для представления данных веб-сайта в целом.

  • *Класс отмечен как partial (Partial в Microsoft Visual Basic).

  • Класс отмечен как public (Public в Visual Basic). (Можно переопределить с помощью атрибута AccessModifier элемента <Web>.)

  • Класс получает имя имя_файлаDataContext, где имя_файла — это имя файла (без расширения), указанное в параметре /code командной строки средства SPMetal. Например, если в командной строке указано "/code:Personnel.vb", то класс называется PersonnelDataContext. (Можно переопределить с помощью атрибута Class элемента <Web>.)

Свойства, представляющие списки

  • Свойство создается (в классе, производном от DataContext) для каждого не скрытого списка на веб-сайте. (Можно переопределить с помощью элемента <ExcludeList> или <ExcludeOtherLists>.)

  • *Тип свойства —EntityList<TEntity>.

  • *Свойство помечено как public (Public в Visual Basic).

  • Для скрытых списков свойства не создаются. (Можно переопределить с помощью элемента <IncludeHiddenLists> или элемента <List>, атрибут Name которого назначен скрытому списку.)

  • Свойство, представляющее список, имеет то же имя, что и список, но со следующими исключениями.

    • Пробелы в имени списка удаляются из имени свойства.

    • Если первая буква имени списка строчная, в имени свойства она становится прописной.

    Имя списка

    Имя свойства

    Announcements

    Announcements

    Team Members

    TeamMembers

    lentils

    Lentils

    (Можно переопределить с помощью атрибута Member элемента <List>.)

  • TEntity, параметр типа свойства EntityList<TEntity>, является классом типа контента, который создается для списка. См. раздел Классы, представляющие типы контента далее в этом разделе. Как правило, если со списком связано более одного типа контента, TEntity является типом контента общей части. Часто классом общей части является базовый тип контента в Microsoft SharePoint Foundation. (Можно переопределить с помощью атрибута Type элемента <List>.)

    Важное примечаниеВажно!

    У общего правила, согласно которому тип контента общей части используется всегда, когда у списка больше одного типа контента, есть одно исключение. SharePoint Foundation добавляет базовый тип контента Folder ко всем спискам (в дополнение к базовому типу контента Item). Однако по умолчанию SPMetal не учитывает тип контента Folder при определении, имеется ли у списка больше одного типа контента. Поэтому если тип контента Folder является единственным дополнительным типом контента, то параметр TEntity свойства EntityList<TEntity> является полным специальным типом контента для списка, например Announcement для списка "Извещения" и CalendarEvent для списка "Календарь". Это поведение по умолчанию можно переопределить.

Классы, представляющие типы контента

  • Класс типа контента создается для представления базового типа контента SharePoint Foundation Item. (Можно переопределить с помощью элемента <ExcludeContentType> для типа контента и для каждого класса типа контента, производного от него.)

  • Для каждого списка (не исключенного из создания кода) класс типа контента создается для каждого определенного типа контента, назначенного списку. (Можно переопределить с помощью элемента <ExcludeContentType> или <ExcludeOtherContentTypes>.)

  • Для любого определенного типа контента, включая базовый тип Item, имя созданного класса совпадает с именем типа контента. (Можно переопределить с помощью атрибута Class элемента <ContentType>.)

  • *Для любого списка, в котором не используются определенные типы контента (и который не был исключен из создания кода), но в который был добавлен один или несколько столбцов, создается класс, представляющий подразумеваемый тип контента.

  • Класс, представляющий подразумеваемый тип контента, получает имя имя_обработанного_спискабазовый_тип_контента, где имя_обработанного_списка совпадает с именем, созданным для свойства, представляющего список (см. подраздел Свойства, представляющие списки выше в этом разделе), а базовый_тип_контента — это имя определенного типа контента, от которого унаследован подразумеваемый тип контента. Обычно это тип Item, однако в некоторых случаях это может быть имя какого-либо другого определенного типа контента. Например, если определенный тип контента Issue добавляется в список Tasks, а затем один столбец этого типа контента удаляется из списка, то класс, представляющий новый подразумеваемый тип контента, будет называться TasksIssue (Можно переопределить с помощью атрибута Class элемента <ContentType>.)

    Важное примечаниеВажно!

    Подразумеваемый тип контента еще не имеет имени в момент чтения файла parameter.xml, поэтому использовать "имя_обработанного_спискабазовый_тип_контента" в качестве значения какого-либо атрибута любого элемента в файле parameters.xml нельзя. Например, с помощью SPMetal нельзя определить свойство EntityList<TEntity><T>, представляющее список Team Members, как EntityList<TeamMembersItem>, где TeamMembersList — это подразумеваемый тип контента списка, путем создания элемента <List> для списка и присваивания его параметру Type значения "TeamMembersItem". Это приведет к ошибке средства SPMetal, поскольку оно еще не создало имя "TeamMembersItem" в момент чтения XML-файла параметров. При необходимости работать с элементами списка как с объектами подразумеваемого типа в вызове GetList<T>(String) можно использовать метод Cast<TResult>(IQueryable), возвращающий анонимный тип. Например, var teamMembers = teamWebSite.GetList<Item>("TeamMembers").Cast<TeamMembersItem>();.

  • *Если тип контента наследуется от другого типа контента, то созданный класс, представляющий первый тип контента, будет наследоваться от класса, представляющего второй тип контента.

  • *Классы типа контента помечены как partial (Partial в Visual Basic).

  • Классы типа контента помечены как public (Public в Visual Basic). (Можно переопределить с помощью атрибута AccessModifier элемента <ContentType>.)

  • Для скрытых типов контента класс не создается. (Можно переопределить с помощью элемента <IncludeHiddenContentTypes> или <ContentType>, атрибут Name которого назначен скрытому типу контента.)

  • *Класс, представляющий базовый тип контента Item, реализует интерфейсы ITrackEntityState, ITrackOriginalValues, INotifyPropertyChanged и INotifyPropertyChanging.

Свойства, представляющие столбцы списка

  • Для каждого не скрытого поля (столбца) в типе контента создается свойство (в классе типа контента). (Можно переопределить с помощью элемента <ExcludeColumn> или <ExcludeOtherColumns>.)

  • *Свойство помечено как public (Public в Visual Basic).

  • Свойство имеет такое же имя, что и столбец, который оно представляет. (Можно переопределить с помощью атрибута Member элемента <Column>.)

  • *Пробелы в имени столбца удаляются.

  • *Если первое слово в имени столбца записано строчными буквами, в имени свойства оно указывается прописными.

  • Тип свойства столбца определяется на основании свойства поля в соответствии с сопоставлением типов, приведенном в статье Сопоставление типов: от поставщика LINQ to SharePoint к .NET. (Можно переопределить с помощью атрибута Type элемента <Column>.)

  • Для столбцов, находящихся в списке, но отсутствующих в типе контента, свойства не создаются. (Можно переопределить с помощью атрибута Name элемента <Column>.)

  • Для скрытых столбцов свойства не создаются, за исключением скрытых столбцов "Id" и "Version". (Можно переопределить с помощью элемента <IncludeHiddenColumns>.)

Перечисления и классы, которые представляют параметры для поля Choice или MultiChoice

  • Для каждого поля Choice, которое не допускает замещение вариантов, создается класс-перечисление. (Можно переопределить с помощью атрибута Type элемента <Column>.)

  • Для каждого поля MultiChoice, которое не допускает замещение вариантов и содержит менее 31 варианта, создается класс-перечисление, дополненный атрибутом [Flags]. (Можно переопределить с помощью атрибута Type элемента <Column>.)

  • *В обоих случаях к перечислениям в качестве возможных значений добавляются "Invalid" и "None".

  • *Для каждого поля Choice или MultiChoice, которое допускает замещение вариантов, создается запечатанный класс с константой String для каждого определенного значения.

Поля EntityRef<T>, EntitySet<T> и LookupList<T>, представляющие отношения со списком подстановки

  • *Для каждого столбца, который содержит значения подстановки для поля в другом списке и не допускает несколько значений, свойство, представляющее столбец, является оболочкой для частного поля типа EntityRef<TEntity>, где TEntity — это тип контента списка подстановки.

  • *Для каждого столбца, который содержит значения подстановки для поля в другом списке, допускает несколько значений и выполняет поиск в списке, представленном созданным SPMetal кодом, свойство, представляющее этот столбец, является оболочкой частного поля типа EntitySet<TEntity>, где TEntity имеет тип контента списка подстановки.

  • * Для каждого столбца, который содержит значения подстановки для поля в другом списке, допускает несколько значений и выполняет поиск в списке, не представленном созданным SPMetal кодом, таком как скрытый целевой список или список, исключенный из создания кода в файле конфигурации SPMetal, создаются два частных поля LookupList<T>. В одном из этих полей содержатся текущие значения поля подстановки (представляющие собой подмножество значений целевого столбца), в другом — идентификаторы элементов списка, из которых берутся текущие значения. Оба этих частных поля помещаются в оболочку из открытого свойства с типом IList<T>.

См. также

Ссылка

SPMetal

Microsoft.SharePoint.Linq.CodeGeneration

EntityList<TEntity>

EntityRef<TEntity>

EntitySet<TEntity>

LookupList<T>

Концепции

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

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