使用Nhibernate的单向多对一删除/更新策略

时间:2014-10-07 13:32:47

标签: c# nhibernate nhibernate-mapping

我的系统中有一个表FileUpdloaded,用于其他几个表。因此,我系统中上传的文件保存在该表(SqlServer FileStream)

因此,每个需要上传文件的类,我都有类似的映射:

m.ManyToOne(x => x.FileUploaded, map => {
                    map.Column("File");
                    map.Class(typeof(FileUploaded));
                    map.Cascade(Cascade.All | Cascade.DeleteOrphans);
});

所以,因为它是一个单向关系我应该手动删除文件,对吧? 我将新文件设置为对象,之后我明确地删除旧表单FileUploaded表:

var oldId = myObject.FileUploaded.Id;
myObject.FileUploaded = new FileUploaded(...)
session<FileUploaded>.Delete(oldId)

这是正确的方法吗?或者我搞乱了映射?

1 个答案:

答案 0 :(得分:1)

<many-to-one>的情况下,唯一的出路就是 - 正如您所描述的那样。文档:

(小引用)

<many-to-one
        name="PropertyName"                                (1)
        column="column_name"                               (2)
        class="ClassName"                                  (3)
        cascade="all|none|save-update|delete"              (4)
        ...
  

...   (4)级联(可选):指定应将哪些操作从父对象级联到关联对象。

所以,没有 all-delete-orphan 。这意味着,如果我们更改<many-to-one>的引用,我们就无法从孤儿删除中获利。唯一的方法是明确和手动删除...