![](/img/trans.png)
[英]NHibernate mapping not adding ON DELETE CASCADE option to foreign key reference
[英]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.