Rentalエンティティの追加

引き続き、レンタルを表すRentalエンティティを追加します。RentalエンティティにはDaySpan(レンタル日数:Int32)というプロパティを追加します。

ここでは、1個のレンタルには複数のDVDが含まれるという意味で、1対多の関連を設定します。ちなみに、本来のレンタル業務のことを考慮すると、もっと多くのエンティティを追加して、関連の種類も変更する必要があるのですが、本稿ではLightSpeedの機能紹介の都合上、このモデルで進めていきます。

Rentalエンティティを追加して、1対多の関連を設定

相互参照用のプロパティ名は、デフォルトの「Rental」と「Dvds」とします。レンタルに含まれないDVDもあるとして、[Is Nullable]プロパティをTrueに設定します。Rentalの読み込み時に関連するDvdも同時に読み込むため[Eager Load Collection]プロパティをTrueに設定します。この設定で生成されるコードは、次のようになります。

生成されたDvdエンティティとRentalエンティティのコード(抜粋)

1対多の関連がプロパティとして構成されていることが分かります。LightSpeedでは、EntityCollectionクラスとEntityHolderクラスを使って、この関連を制御します。

1対多の関連の設定

1対多の関連では次のような項目を設定できます(説明の都合上「1対多」の両モデルをそれぞれ「1」と「多」で表現しています)。

1対多の関連に設定できる項目

設定名 既定値 説明
Backreference Name エンティティ名 「多」から「1」を逆参照する時のプロパティ名
Collection Name エンティティ名+s 「1」から「多」を参照する時のコレクション名
Is Nullable False Null許容型にするか。「多」で「1」のキーを格納する型に反映
Backreference Aggregates なし 「1」のロード制御用集約名。セミコロンで複数指定
Collection Aggregates なし 「多」のロード制御用集約名。セミコロンで複数指定
Eager Load Backreference False 「多」を取り出した時に「1」も同時にロードするか
Eager Load Collection False 「1」を取り出した時に「多」も同時にロードするか
Order By なし 「多」を取り出すときの並び順、SQLのORDER BYと同じ記法
Column Name なし(エンティティ+Id) 永続化するテーブルの列名
Is Dependent False カスケード削除を行うか(DependentAttribute参照)

テーブルのレイアウト

このモデルからデータベースを更新すると、次のテーブル構成になります。

データベースのモデル図(Visioにてリバースエンジニアリング)

モデルデザイナーの問題

このデザイナーはLightSpeed2.0から登場した新機能のせいか、日本語を正しく処理できなかったり、複雑なモデルをテーブルに反映させる時にうまく更新できなかったりする問題がありました。その場合にはデータベース管理ツール(SQL Server Management Studio等)を使って、いったんテーブルを削除したり手動で制御したりすると良いでしょう。

まとめ

今回は、LightSpeedの導入、モデルデザイナーの使い方について紹介してきました。次回は、生成されたコードを使ってエンティティを操作する方法を紹介していきます。