流暢な NHibernate を使用して、Project と ProjecSettings の間に 1 対 1 の関連付けを実装する必要があります。
public class ProjectMap : ClassMap<Project>
{
public ProjectMap()
{
Id(x => x.Id)
.UniqueKey(MapUtils.Col<Project>(x => x.Id))
.GeneratedBy.HiLo("NHHiLoIdentity", "NextHiValue", "1000",
string.Format("[EntityName] = '[{0}]'", MapUtils.Table<Project>()))
.Not.Nullable();
HasOne(x => x.ProjectSettings)
.PropertyRef(x => x.Project);
}
}
public class ProjectSettingsMap : ClassMap<ProjectSettings>
{
public ProjectSettingsMap()
{
Id(x => x.Id)
.UniqueKey(MapUtils.Col<ProjectSettings>(x => x.Id))
.GeneratedBy.HiLo("NHHiLoIdentity", "NextHiValue", "1000",
string.Format("[EntityName] = '[{0}]'", MapUtils.Table<ProjectSettings>()));
References(x => x.Project)
.Column(MapUtils.Ref<ProjectSettings, Project>(p => p.Project, p => p.Id))
.Unique()
.Not.Nullable();
}
}
これにより、プロジェクト設定の次の sql が生成されます。
CREATE TABLE ProjectSettings (
Id bigint PRIMARY KEY NOT NULL,
Project_Project_Id bigint NOT NULL UNIQUE,
/* Foreign keys */
FOREIGN KEY (Project_Project_Id)
REFERENCES Project()
ON DELETE NO ACTION
ON UPDATE NO ACTION
);
私が達成しようとしているのは、FOREIGN KEY (Project_Project_Id) に対して ON DELETE CASCADE を設定することです。そのため、プロジェクトが SQL クエリによって削除されると、その設定も削除されます。どうすればこれを達成できますか?
編集: Cascade.Delete() オプションについては知っていますが、必要なものではありません。FK ステートメントの生成を傍受する方法はありますか?