既定の SPMetal コード生成の規則
最終更新日: 2015年3月9日
適用対象: SharePoint Foundation 2010
この記事の内容
Web サイトを表すクラス
リストを表すプロパティ
コンテンツ タイプを表すクラス
リストの列を表すプロパティ
Choice フィールドまたは MultiChoice フィールドのオプションを表す列挙およびクラス
ルックアップ リスト関係を表す EntityRef<T>、EntitySet<T>、および LookupList<T> フィールド
このトピックでは、コードを生成するときに SPMetal が既定で従う規則を指定します。この規則の中には、SPMetal パラメーター ファイルを作成し、/parameters オプションを SPMetal コマンド ラインに追加することで変更できるものがあります。このカスタマイズの詳細については、「パラメーター XML ファイルを使用して SPMetal 既定をオーバーライドする」および「SPMetal」を参照してください。
次のセクションで、アスタリスク (*) が付いている規則はオーバーライドできません。
オーバーライドできる規則の後ろには、その規則をオーバーライドする XML マークアップが示されます。
Web サイトを表すクラス
*DataContext から継承するクラスが生成され、Web サイト データ全体を表します。
*クラスは partial (Microsoft Visual Basic では Partial) でマークされます。
クラスは public (Visual Basic では Public) でマークされます (<Web> 要素の AccessModifier 属性でオーバーライド)。
クラスの名前は FileNameDataContext です。FileName には、SPMetal コマンド ラインの /code オプションで指定されたファイルの名前 (ファイル名拡張子を除く) を指定してください。たとえば、コマンド ラインで "/code:Personnel.vb" が指定されている場合、クラスには PersonnelDataContext という名前が付けられます (<Web> 要素の Class 属性でオーバーライド)。
リストを表すプロパティ
Web サイトの隠しリスト以外のすべてのリストに対して、プロパティが (DataContext 派生クラスに) 生成されます (<ExcludeList> 要素または <ExcludeOtherLists> 要素でオーバーライド)。
*プロパティの種類は EntityList<TEntity> です。
*プロパティは public (Visual Basic では Public) でマークされます。
隠しリストに対してはプロパティが生成されません (Name 属性が隠しリストに割り当てられている <IncludeHiddenLists> 要素または <List> 要素でオーバーライド)。
リストを表すプロパティの名前は、以下の点を除き、リストの名前と同じです。
リスト名に含まれているスペースは、プロパティ名から削除されます。
リスト名の先頭文字が小文字の場合、その文字はプロパティ名では大文字になります。
リスト名
プロパティ名
Announcements
Announcements
Team Members
TeamMembers
lentils
Lentils
(<List> 要素の Member 属性でオーバーライド)。
EntityList<TEntity> プロパティの type パラメーター、TEntity は、リストに対して生成されたコンテンツ タイプ クラスです。このトピックで後述する「コンテンツ タイプを表すクラス」を参照してください。一般的に、複数のコンテンツ タイプがリストに関連付けられている場合は、TEntity が公分母コンテンツ タイプです。公分母クラスは、多くの場合、Microsoft SharePoint Foundation の Item 基本コンテンツ タイプに過ぎません (<List> 要素の Type 属性でオーバーライド)。
重要 リストに複数のコンテンツ タイプがある場合は必ず公分母コンテンツ タイプが使用されるという通常の規則には、例外が 1 つあります。SharePoint Foundation では、(Item 基本コンテンツ タイプの他に) Folder 基本コンテンツ タイプがすべてのリストに追加されます。しかし、既定では、SPMetal はリストに複数のコンテンツ タイプがあるかどうかを判断する際に、Folder コンテンツ タイプを考慮しません。したがって、Folder コンテンツ タイプが唯一の追加のコンテンツ タイプの場合、EntityList<TEntity> プロパティの TEntity は、お知らせリストの Announcement、カレンダー リストの CalendarEvent など、リスト用に完全に特定されたコンテンツ タイプになります。この既定の動作はオーバーライドできます。
コンテンツ タイプを表すクラス
コンテンツ タイプ クラスが生成され、SharePoint Foundation の Item 基本コンテンツ タイプを表します (コンテンツ タイプ、およびそのコンテンツ タイプから継承する各コンテンツ タイプ クラスの <ExcludeContentType> 要素でオーバーライド)。
(コード生成の対象から除外されていない) すべてのリストについて、そのリストに割り当てられたすべての定義済みコンテンツ タイプに対して、コンテンツ タイプ クラスが生成されます (<ExcludeContentType> 要素または <ExcludeOtherContentTypes> 要素でオーバーライド)。
Item 基本コンテンツ タイプを含め、すべての定義済みコンテンツ タイプについて、生成されたクラスの名前はコンテンツ タイプと同じになります (<ContentType> 要素の Class 属性でオーバーライド)。
*定義済みコンテンツ タイプが使用されていないリストで、コード生成の対象からも除外されていない場合、しかし 1 つ以上の列がそのリストに追加されている場合は、暗黙的なコンテンツ タイプを表すクラスが生成されます。
暗黙的なコンテンツ タイプを表すクラスの名前は ProcessedListNameBaseContentType になります。ProcessedListName は、リストを表すプロパティで生成された名前に置き換えてください (このトピックの「リストを表すプロパティ 」を参照)。BaseContentType は、暗黙的なコンテンツ タイプの派生元である定義済みコンテンツ タイプの名前に置き換えてください。これは、通常、"Item" ですが、他の定義済みコンテンツ タイプの名前の場合もあります。たとえば、定義済みコンテンツ タイプ Issue が Tasks というリストに追加され、そのコンテンツ タイプの 1 つの列がリストから削除された場合、この新しい暗黙的なコンテンツ タイプを表すクラスの名前は TasksIssue になります (<ContentType> 要素の Class 属性でオーバーライド)。
重要 parameter.xml ファイルの読み取り時は暗黙的なコンテンツ タイプにはまだ名前がついていないので、"ProcessedListNameBaseContentType" を、parameters.xml ファイルの任意の要素の任意の属性の値として使用することはできません。たとえば、Team Members リストの <List> 要素を作成し、その Type パラメーターを "TeamMembersItem" に設定することで、SPMetal を取得して、Team Members リストを表す EntityList<TEntity><T> プロパティを EntityList<TeamMembersItem> として定義することはできません (TeamMembersList はリストの暗黙的なコンテンツ タイプです)。この操作を行うと、SPMetal によってエラーが生成されます。これは、SPMetal は、パラメーター XML ファイルを読み取る時点では、まだ "TeamMembersItem" という名前を生成していないからです。リストのメンバーを暗黙的なタイプのオブジェクトとして扱う必要がある場合は、GetList<T>(String) への呼び出しで Cast<TResult>(IQueryable) メソッドを使用して、匿名のタイプを返すようにします。たとえば、var teamMembers = teamWebSite.GetList<Item>("TeamMembers").Cast<TeamMembersItem>(); を使用します。
*コンテンツ タイプが別のコンテンツ タイプから継承している場合、前者を表す生成されたクラスは、後者を表すクラスから継承します。
*コンテンツ タイプ クラスは partial (Visual Basic では Partial) でマークされます。
コンテンツ タイプ クラスは public (Visual Basic では Public) でマークされます (<ContentType> 要素の AccessModifier 属性でオーバーライド)。
非表示コンテンツ タイプに対してはクラスが生成されません (Name 属性が非表示コンテンツ タイプに割り当てられている <IncludeHiddenContentTypes> 要素または <ContentType> 要素でオーバーライド)。
*Item 基本コンテンツ タイプを表すクラスは ITrackEntityState、ITrackOriginalValues、INotifyPropertyChanged、および INotifyPropertyChanging を実装します。
リストの列を表すプロパティ
コンテンツ タイプの非表示フィールド (列) 以外のすべてのフィールド (列) に対して、プロパティが (コンテンツ タイプ クラスに) 生成されます (<ExcludeColumn> 要素または <ExcludeOtherColumns> 要素でオーバーライド)。
*プロパティは public (Visual Basic では Public) でマークされます。
プロパティの名前は、そのプロパティが表す列の名前と同じです (<Column> 要素の Member 属性でオーバーライド)。
*列名に含まれるスペースは削除されます。
*列名の先頭文字が小文字の場合、その文字はプロパティ名では大文字になります。
列プロパティの種類は、「[型のマッピング] LINQ to SharePoint プロバイダーから .NET」で説明されているマッピングに従って、フィールドのプロパティに応じて決まります (<Column> 要素の Type 属性でオーバーライド)。
リストに含まれていて、コンテンツ タイプにはない列に対してはプロパティが生成されません (<Column> 要素の Name 属性でオーバーライド)。
非表示の列 (非表示の "Id" 列および "Version" 列は除く) に対してはプロパティが生成されません (<IncludeHiddenColumns> 要素でオーバーライド)。
Choice フィールドまたは MultiChoice フィールドのオプションを表す列挙およびクラス
選択肢を追加できないすべての Choice フィールドに対して、列挙クラスが生成されます (<Column> 要素の Type 属性でオーバーライド)。
選択肢を追加できず、かつ 30 以下の選択肢を使用できるすべての MultiChoice フィールドに対して、[Flags] 属性で修飾された列挙クラスが生成されます (<Column> 要素の Type 属性でオーバーライド)。
*使用できる値として "Invalid" および "None" が両方の列挙に追加されます。
*選択肢を追加できるすべての Choice フィールドまたは MultiChoice フィールドに対して、シールされたクラスが、String 定数によって定義済みの値ごとに生成されます。
ルックアップ リスト関係を表す EntityRef<T>、EntitySet<T>、および LookupList<T> フィールド
*他のリストのフィールドへのルックアップであり、複数の値が許可されていないすべての列について、その列を表すプロパティは、EntityRef<TEntity> 型のプライベート フィールドをラップします。ここで、TEntity は、ルックアップ リストのコンテンツ タイプです。
*他のリストのフィールドへのルックアップであり、複数の値が許可されている列が、SPMetal 生成のコードによって表されているリストをルックアップする場合、その列を表すプロパティは、EntitySet<TEntity> 型のプライベート フィールドをラップします。ここで、TEntity は、ルックアップ リストのコンテンツ タイプです。
*他のリストのフィールドへのルックアップであり、複数の値が許可されている列が、SPMetal 生成のコードによって表されていないリスト (非表示になっているか、SPMetal の構成ファイルによるコード生成の対象から除外されているターゲット リストなど) をルックアップする場合は、2 つのプライベート LookupList<T> が生成されます。このフィールドの一方のフィールドには、ルックアップ フィールドの現在の値 (ターゲット列のサブセット) が、もう一方のフィールドには、現在の値が取得されたリスト アイテムの ID が格納されています。この 2 つのプライベート フィールドは、それぞれが IList<T> 型のパブリック プロパティによってラップされます。
関連項目
参照
Microsoft.SharePoint.Linq.CodeGeneration