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

时间:2011-05-12 14:17:51

标签: c# nhibernate fluent-nhibernate

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

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);

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

有没有解决这个问题的方法?

1 个答案:

答案 0 :(得分:1)

这样的事情怎么样?

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

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