Fluent nhibernate,删除不可为空的属性并替换它

本文关键字:属性 替换 nhibernate 删除 Fluent | 更新日期: 2023-09-27 17:56:08

我有一个具有不可为空属性的对象。

class Notebook {
  Blueprint Blueprint { get; set; }
}

映射

// ...
NotebookMap() {
 // ...
 References(x => x.Blueprint)
  .Not.Nullable()
  .Cascade.All();
}

好的,太好了。美妙。

如果我想更改附加到笔记本的Blueprint并删除旧蓝图,会发生什么情况?这行不通..

notebook.Blueprint = // new blueprint code.;

这工作正常...但是旧的蓝图并没有被删除,它只是愉快地在代码中徘徊,浪费空间。

如果我尝试这个.

session.Delete(notebook.Blueprint);

我收到一个错误,因为现在该字段为空(并且必须是不可为空的)。

有没有办法解决这个问题?

Fluent nhibernate,删除不可为空的属性并替换它

这样的事情怎么样?

var oldBlueprint = notebook.Blueprint;
notebook.Blueprint = // new blueprint code;
session.Flush(); // might or might not be needed
session.Delete(oldBlueprint);

当然,蓝图可能被另一个笔记本引用,因此删除仍可能失败。