NHibernate删除级联上的一对一外键

NHibernate删除级联上的一对一外键,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我需要使用fluent NHibernate实现项目和项目设置之间的一对一关联: public class ProjectMap : ClassMap<Project> { public ProjectMap() { Id(x => x.Id) .UniqueKey(MapUtils.Col<Project>(x => x.Id)) .GeneratedBy.HiLo("NHHiLoIdentity",

我需要使用fluent NHibernate实现项目和项目设置之间的一对一关联:

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();
    }
}
我试图实现的是外键(Project\u Project\u Id)的DELETE级联,这样当通过sql查询删除项目时,它的设置也会被删除。我怎样才能做到这一点


编辑:我知道Cascade.Delete()选项,但这不是我需要的。有没有办法拦截FK语句的生成?

看来Fluent NHibernate无法做到这一点

您可以这样做:

HasOne(x => x.ProjectSettings).PropertyRef(x => x.Project).Cascade.Delete();

这将按预期工作,但DDL不会更改,FNH将以编程方式处理级联,而不是使用DB引擎。

我知道cascade.Delete(),但这不是我需要的。有没有办法拦截FK语句生成?FNH没有,没有。你可以尝试在NHibernate配置中使用NHibernate.Mapping.IAuxiliaryDatabaseObject,它可能可以做到这一点,但据我所知,FNH对此没有答案。好吧,谢谢你指明了方向。虽然我希望有一个更简单的方法。
HasOne(x => x.ProjectSettings).PropertyRef(x => x.Project).Cascade.Delete();