Правила создания кода 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>.
См. также
Ссылка
Microsoft.SharePoint.Linq.CodeGeneration
Концепции
Сопоставление типов: от поставщика LINQ to SharePoint к .NET
Переопределение значений SPMetal по умолчанию с помощью XML-файла параметров