2
我需要用流利的NHibernate的实施项目和ProjecSettings之间的一个一对一的关联:NHibernate的一对一外键DELETE CASCADE
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
);
我想要实现的是为ONE DELETE CASCADE FOREIGN KEY(Project_Project_Id),以便当通过SQL查询删除项目时,它的设置也被删除。我怎样才能做到这一点?
编辑:我知道Cascade.Delete()选项,但它不是我所需要的。有什么方法可以拦截FK语句生成?
我知道Cascade.Delete(),但它不是我所需要的。有什么方法可以拦截FK语句生成? – xll
不符合FNH,没有。你可以尝试在NHibernate配置中使用NHibernate.Mapping.IAuxiliaryDatabaseObject,这可能会做到这一点,但据我所知,FNH没有回答这个问题。 –
恩,谢谢你指出方向。虽然我希望有一个更简单的方法。 – xll