【问题标题】:NHibernate One to One Foreign Key ON DELETE CASCADENHibernate 一对一外键 ON DELETE CASCADE
【发布时间】:2012-12-14 01:02:15
【问题描述】:

我需要使用流畅的 NHibernate 实现 Project 和 ProjecSettings 之间的一对一关联:

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语句的生成?

【问题讨论】:

    标签: nhibernate fluent-nhibernate


    【解决方案1】:

    Fluent-NHibernate 好像不能做到这一点。

    你可以这样做:

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

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

    【讨论】:

    • 我知道 Cascade.Delete(),但这不是我需要的。有什么办法可以拦截FK语句的生成?
    • 不适用于 FNH,没有。您可以尝试在 NHibernate 配置中使用 NHibernate.Mapping.IAuxiliaryDatabaseObject,它可能可以做到这一点,但据我所知,FNH 对此没有任何答案。
    • 嗯,谢谢你指点方向。虽然我希望有更简单的方法。
    猜你喜欢
    • 1970-01-01
    • 2021-10-25
    • 2019-10-06
    • 2021-03-29
    • 2012-02-11
    • 2014-02-14
    • 1970-01-01
    相关资源
    最近更新 更多