属性ベースの対応付け

LINQ to SQL では、属性を適用するか外部マッピング ファイルを使用して、SQL Server データベースを LINQ to SQL オブジェクト モデルにマップします。 このトピックでは、属性ベースのアプローチについて説明します。

最も基本形式では、LINQ to SQL はデータベースを DataContext、テーブルをクラスにマップし、列とリレーションシップをそれらのクラスのプロパティにマップします。 属性を使用して、オブジェクト モデルの継承階層をマップすることもできます。 詳細については、「 方法: Visual Basic または C# でオブジェクト モデルを生成する」を参照してください。

Visual Studio を使用する開発者は、通常、オブジェクト リレーショナル デザイナーを使用して属性ベースのマッピングを実行します。 SQLMetal コマンド ライン ツールを使用することも、属性を自分で手動でコーディングすることもできます。 詳細については、「 方法: Visual Basic または C# でオブジェクト モデルを生成する」を参照してください。

注

外部 XML ファイルを使用してマップすることもできます。 詳細については、「 外部マッピング」を参照してください。

次のセクションでは、属性ベースのマッピングについて詳しく説明します。 詳細については、 System.Data.Linq.Mapping 名前空間を参照してください。

DatabaseAttribute 属性

接続によって名前が指定されていない場合に、この属性を使用してデータベースの既定の名前を指定します。 この属性は省略可能ですが、使用する場合は、次の表に示すように、 Name プロパティを適用する必要があります。

プロパティ タイプ 既定値 説明
Name 糸 Name を参照してください Name プロパティと共に使用され、データベースの名前を指定します。

詳細については、DatabaseAttributeを参照してください。

TableAttribute 属性

この属性を使用して、データベース テーブルまたはビューに関連付けられているエンティティ クラスとしてクラスを指定します。 LINQ to SQL は、この属性を持つクラスを永続的なクラスとして扱います。 次の表では、 Name プロパティについて説明します。

プロパティ タイプ 既定値 説明
Name 糸 クラス名と同じ文字列 データベース テーブルに関連付けられたエンティティ クラスとしてクラスを指定します。

詳細については、TableAttributeを参照してください。

ColumnAttribute 属性

この属性を使用して、データベース テーブル内の列を表すエンティティ クラスのメンバーを指定します。 この属性は、任意のフィールドまたはプロパティに適用できます。

LINQ to SQL が変更をデータベースに保存すると、列として識別したメンバーのみが取得され、保持されます。 この属性を持たないメンバーは非永続的であると見なされ、挿入または更新のために送信されません。

次の表では、この属性のプロパティについて説明します。

プロパティ タイプ 既定値 説明
AutoSync AutoSync(オートシンク) 決してない 挿入または更新操作の後に値を取得するように共通言語ランタイム (CLR) に指示します。

オプション: Always、Never、OnUpdate、OnInsert。
CanBeNull ブール値 true 列に null 値を含めることができることを示します。
DbType 糸 推論されたデータベース列の種類 データベース型と修飾子を使用して、データベース列の型を指定します。
Expression 糸 空っぽ データベースの計算列を定義します。
IsDbGenerated ブール値 false データベースが自動生成する値が列に含まれていることを示します。
IsDiscriminator ブール値 false LINQ to SQL 継承階層の識別子の値が列に含まれていることを示します。
IsPrimaryKey ブール値 false このクラス メンバーが、テーブルの主キーまたは主キーの一部である列を表すかどうかを指定します。
IsVersion ブール値 false メンバーの列の種類をデータベースのタイムスタンプまたはバージョン番号として識別します。
UpdateCheck UpdateCheck Always (メンバーの IsVersion が true の場合は除く) LINQ to SQL がオプティミスティック コンカレンシーの競合の検出にどのようにアプローチするかを指定します。

詳細については、ColumnAttributeを参照してください。

注

AssociationAttribute プロパティ値と ColumnAttribute Storage プロパティ値では大文字と小文字が区別されます。 たとえば、AssociationAttribute.Storage プロパティの属性に使用されている値は、コード内の別の場所で使用されている対応するプロパティ名と、大文字と小文字が一致するようにしてください。 これは、Visual Basic を含め、通常は大文字と小文字が区別されない言語であっても、すべての .NET プログラミング言語に適用されます。 Storage プロパティの詳細については、「 DataAttribute.Storage」を参照してください。

AssociationAttribute 属性

この属性を使用して、外部キーと主キーのリレーションシップなど、データベース内の関連付けを表すプロパティを指定します。 リレーションシップの詳細については、「 方法: データベース リレーションシップをマップする」を参照してください。

次の表では、この属性のプロパティについて説明します。

プロパティ タイプ 既定値 説明
DeleteOnNull ブール値 false 外部キー メンバーがすべて null 非許容である関連付けに配置された場合、関連付けが null に設定されている場合にオブジェクトを削除します。
DeleteRule 糸 無し 関連付けに削除動作を追加します。
IsForeignKey ブール値 false true の場合は、データベース リレーションシップを表す関連付けの外部キーとしてメンバーを指定します。
IsUnique ブール値 false true の場合は、外部キーの一意性制約を示します。
OtherKey 糸 関連クラスの ID 関連付けのもう一方の側のキー値として、ターゲット エンティティ クラスの 1 つ以上のメンバーを指定します。
ThisKey 糸 包含クラスの ID 関連付けのこの側のキー値を表す、このエンティティ クラスのメンバーを指定します。

詳細については、AssociationAttributeを参照してください。

注

AssociationAttribute プロパティ値と ColumnAttribute Storage プロパティ値では大文字と小文字が区別されます。 たとえば、AssociationAttribute.Storage プロパティの属性に使用されている値は、コード内の別の場所で使用されている対応するプロパティ名と、大文字と小文字が一致するようにしてください。 これは、Visual Basic を含め、通常は大文字と小文字が区別されない言語であっても、すべての .NET プログラミング言語に適用されます。 Storage プロパティの詳細については、「 DataAttribute.Storage」を参照してください。

InheritanceMappingAttribute 属性

継承階層をマップするには、この属性を使用します。

次の表では、この属性のプロパティについて説明します。

プロパティ タイプ 既定値 説明
Code 糸 なし。 値を指定する必要があります。 識別子のコード値を指定します。
IsDefault ブール値 false true の場合、ストア内の識別子の値が指定された値のいずれかに一致しない場合に、この型のオブジェクトをインスタンス化します。
Type タイプ なし。 値を指定する必要があります。 階層内のクラスの型を指定します。

詳細については、InheritanceMappingAttributeを参照してください。

FunctionAttribute 属性

この属性を使用して、データベース内のストアド プロシージャまたはユーザー定義関数を表すメソッドを指定します。

次の表では、この属性のプロパティについて説明します。

プロパティ タイプ 既定値 説明
IsComposable ブール値 false false の場合は、ストアド プロシージャへのマッピングを示します。 true の場合は、ユーザー定義関数へのマッピングを示します。
Name 糸 データベース内の名前と同じ文字列 ストアド プロシージャまたはユーザー定義関数の名前を指定します。

詳細については、FunctionAttributeを参照してください。

ParameterAttribute 属性

この属性を使用して、ストアド プロシージャ メソッドに入力パラメーターをマップします。

次の表では、この属性のプロパティについて説明します。

プロパティ タイプ 既定値 説明
DbType 糸 無し データベースの種類を指定します。
Name 糸 データベース内のパラメーター名と同じ文字列 パラメーターの名前を指定します。

詳細については、ParameterAttributeを参照してください。

ResultTypeAttribute 属性

この属性を使用して、結果の種類を指定します。

次の表では、この属性のプロパティについて説明します。

プロパティ タイプ 既定値 説明
Type タイプ (なし) IMultipleResultsを返すストアド プロシージャにマップされたメソッドで使用されます。 ストアド プロシージャの有効な型マッピングまたは予期される型マッピングを宣言します。

詳細については、ResultTypeAttributeを参照してください。

DataAttribute 属性

この属性を使用して、名前とプライベート ストレージ フィールドを指定します。

次の表では、この属性のプロパティについて説明します。

プロパティ タイプ 既定値 説明
Name 糸 データベース内の名前と同じ テーブル、列などの名前を指定します。
Storage 糸 パブリック アクセサー 基になるストレージ フィールドの名前を指定します。

詳細については、DataAttributeを参照してください。

こちらも参照ください