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);
我收到一个错误,因为现在该字段为空(并且必须是不可为空的)。
有没有办法解决这个问题?
这样的事情怎么样?
var oldBlueprint = notebook.Blueprint;
notebook.Blueprint = // new blueprint code;
session.Flush(); // might or might not be needed
session.Delete(oldBlueprint);
当然,蓝图可能被另一个笔记本引用,因此删除仍可能失败。