パラメーター XML ファイルを使用して SPMetal 既定をオーバーライドする
最終更新日: 2011年3月10日
適用対象: SharePoint Foundation 2010
この記事の内容
SPMetal パラメーター XML ファイル
SPMetal の既定値
既定の動作を変更する
ここでは、SPMetal が生成するコードに関して、XML マークアップのファイルを使用して SPMetal の既定の動作を変更する方法、および生成されたコードでモデル化するリスト、コンテンツ タイプ、および列について説明します。
ファイルで使用される XML マークアップの公式の参考資料は、「SPMetal パラメーター XML スキーマ」から始まります。
SPMetal パラメーター XML ファイル
SPMetal パラメーター XML ファイルは、それが生成するコードについて SPMetal に詳細を指定する XML マークアップを含みます。特に、コードでどのリスト、コンテンツ タイプ、およびフィールド (列) がモデル化される必要があるかを指定します。ファイルは /parameters コマンド ライン オプションによって SPMetal に渡されます。SPMetal コマンド ライン オプションの詳細については、「SPMetal」を参照してください。
SPMetal の既定値
SPMetal はパラメーター XML ファイルを必要としません。存在しない場合は、既定のルールを使用します。パラメーター ファイルが使用される場合、SPMetal は明示的にパラメーター ファイルと矛盾する部分以外は、既定のルールを使用します。これらのルールの詳細については、「既定の SPMetal コード生成の規則」を参照してください。
既定の動作を変更する
このセクションでは、パラメーター XML ファイルのマークアップを使用して、SPMetal の既定の動作を変更する方法について説明します。
Web 要素
最上位レベルの要素は <Web> です。Web サイトのコンテンツのすべてを表す DataContext から派生したクラスに SPMetal が既定で付ける名前を使用したくない場合は、その Class 属性を設定します。生成されたクラスを internal (Microsoft Visual Basic では Friend) にする場合は、その AccessModifier 属性を "Internal" に設定します。既定では Public です。
List 要素
リストを表すために SPMetal がプロパティを生成する方法を変更する場合は、<Web> 要素に子として <List> 要素を追加します。非表示リストなど、既定ではモデル化されないリストのクラスを強制的に SPMetal に生成させるには、<List> 要素を追加します。リストの名前に、必須である Name 属性を設定します。
リストを表すプロパティに SPMetal が既定で付ける名前を使用しない場合は、Member 属性を使用して代わりの名前を指定します。たとえば、既定で、SPMetal は Calendar リストのプロパティ名として "Calendar" を使用します。<List Name="Calendar" Member="ScheduledEvents"/> というマークアップを使用して、これを ScheduledEvents に変更することができます。
SPMetal が既定で割り当てるリストのアイテムの種類を使わない場合は、Type パラメーターを異なる種類に設定します。たとえば、書き込み可能なプロパティが 1 つ追加されていること以外は、SPMetal がリスト アイテムの種類として作成するクラスと同じようなクラスを (別のコード ファイルに) 作成することができます。リスト アイテムの種類にクラスを割り当て、LINQ クエリで返されるリスト アイテムのプロパティに書き込むように、呼び出しコードを作成することができます。
注意
SPMetal がリスト アイテムの種類のために生成するクラスの名前を変更するだけの場合は、<List> の Type 属性を使用しないでください。この場合は、<List> 要素の子である <ContentType> 要素の Class 属性を使用します。このトピックで後述する「ContentType 要素」を参照してください。
<List> 要素の子要素には、<ContentType> と <ExcludeContentType> の 2 つがあります。これらの機能は、サイト全体ではなく、リストに範囲指定されたコンテンツ タイプに適用されるということ以外、<Web> 要素の子である同じ名前の要素とまったく同じです。
ExcludeList
SPMetal が特定のリストのプロパティを生成しないようにするには、<Web> 要素にこの子要素を追加します。リストの名前に、必須の Name 属性を設定してください。
ExcludeOtherLists
SPMetal が <List> 要素で明示的に示されないどのリストのプロパティも生成しないようにするには、<Web> 要素にこの子要素を追加します。この要素と <IncludeHiddenLists> 要素は同時に含めることはできません。
IncludeHiddenLists
SPMetal にすべての非表示リストのプロパティを生成することを強制するには、<Web> 要素にこの子要素を追加します。この要素と <ExcludeOtherLists> 要素は同時に含めることはできません。
ContentType 要素
SPMetal がコンテンツ タイプを表すためにクラスを生成する方法を変更する場合は、<Web> 要素 (あるいは <List> 要素) に子として <ContentType> 要素を追加します。非表示コンテンツ タイプのように、既定ではモデル化されないコンテンツ タイプのクラスを強制的に SPMetal に生成させるには、<ContentType> 要素を追加します。コンテンツ タイプの名前に、<ContentType> 要素で必須の Name 属性を設定します (基本的な SharePoint Foundation コンテンツ タイプの名前としては "Item" を使用します)。
コンテンツ タイプを表すクラスに SPMetal が既定で付ける名前を使用しない場合は、Class 属性を使用して代わりの名前を指定します。たとえば、ある Web サイトに Team Members というリストがあり、列がそれに追加されたとします。SPMetal は、既定で、リスト アイテムの種類として TeamMembersItem クラスを作成し、これをリストを表す EntityList<TEntity> プロパティの種類パラメーターとして指定します。以下のマークアップを使用して、種類パラメーターを TeamMember のようなよりわかりやすいものに変更することができます。
<List Name="Team Members">
<ContentType Name="Item" Class="TeamMember" />
</List>
生成されたクラスを internal (Visual Basic では Friend) にする場合は、その AccessModifier 属性を "Internal" に設定します。既定では Public です。その他にはオプションはありません。
Column 要素
非表示フィールドの、既定でモデル化されないフィールド (列) を表すプロパティを作成するよう SPMetal に強制するには、<ContentType> 要素にこの子要素を追加します。必須の Name 属性をフィールドの "内部" 名に設定します。親 <ContentType> 要素が <List> 要素の子である場合、リストにあるがコンテンツ タイプ自体にはないフィールドを表す <Column> 要素を持つことができます。これは列がリストに追加された場合に、起きることがあります。
フィールドを表すプロパティに SPMetal が既定で付ける名前を使用しない場合は、Member 属性を使用して代わりの名前を指定します。
フィールドが選択肢フィールドであり、フィールドで "Fill-in" の選択ができない場合でも、フィールドをモデル化するプロパティの種類を String にする場合は、Type 属性を "String" に設定します (既定で、SPMetal は、"Fill-in" の選択ができない選択列の列定義で指定された可能な値を使用して enum クラスの宣言を生成します)。LINQ が、SharePoint で SharePoint Foundation のフィールドの種類を Microsoft .NET Framework 3.5 データ型にマップする方法の詳細については、「[型のマッピング] LINQ to SharePoint プロバイダーから .NET」を参照してください。
ExcludeColumn 要素
SPMetal が特定のフィールド (列) のプロパティを生成しないようにするには、<ContentType> 要素にこの子要素を追加します。必須の Name 属性をフィールドの "内部" 名に設定してください。
ExcludeOtherColumns 要素
SPMetal が <ContentType> 要素で明示的に示されないどの列のプロパティも生成しないようにするには、<Column> 要素にこの子要素を追加します。この要素と <IncludeHiddenColumns> 要素は同時に含めることはできません。
IncludeHiddenColumns 要素
SPMetal にすべてのコンテンツ タイプの非表示フィールドのプロパティを生成することを強制するには、<ContentType> 要素にこの子要素を追加します。この要素と <ExcludeOtherColumns> 要素は同時に含めることはできません。
ExcludeContentType
SPMetal が特定のコンテンツ タイプのクラスを生成しないようにするには、<Web> 要素 (あるいは <List> 要素) にこの子要素を追加します。コンテンツ タイプの名前に、必須の Name 属性を設定してください。
注意
ブロックされたクラスから継承するようにその他のコンテンツ タイプ クラスが生成された場合は、コンテンツ タイプに対するクラス生成をブロックすることはできません。たとえば、<ExcludeContentType Name="Item" /> 要素を持つ ("Item" と呼ばれる) の基本的な、名前のない SharePoint Foundation コンテンツ タイプのクラス生成をブロックする場合は、Item から継承するすべてのコンテンツ クラスの <ExcludeContentType /> 要素を追加する必要があります。
ExcludeOtherContentTypes
SPMetal が <Web> 要素で明示的に示されないどのコンテンツ タイプのクラスも生成しないようにするには、<ContentType> 要素にこの子要素を追加します。この要素と <IncludeHiddenContentTypes> 要素は同時に含めることはできません。
IncludeHiddenContentTypes
SPMetal にすべての非表示コンテンツ タイプのクラスを生成することを強制するには、<Web> 要素にこの子要素を追加します。この要素と <ExcludeOtherContentTypes> 要素は同時に含めることはできません。
SPMetal パラメーター XML ファイルの例
<?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>