我的系统中有一个表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)
这是正确的方法吗?或者我搞乱了映射?
答案 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>
的引用,我们就无法从孤儿删除中获利。唯一的方法是明确和手动删除...