簡體   English   中英

NHibernate一對一外鍵刪除級聯

[英]NHibernate One to One Foreign Key ON DELETE CASCADE

我需要使用流暢的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語句的生成嗎?

看來Fluent-NHibernate無法做到這一點。

你可以這樣做 :

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

這將按預期工作,但DDL不會更改,FNH將以編程方式而不是使用DB引擎來處理級聯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM