2014-10-07 79 views
1

我在我的系统中有一个FileUpdloaded表,用于其他几个表。所以,在我的系统曾经上传的文件保存在该表(SqlServer的的FileStream)使用Nhibernate与单向多对一删除/更新策略

所以,每一个需要上传的文件类,我有一个类似的映射:

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

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

(小举)

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

... (4)级联(可选):指明哪些操作应该是从父对象级联到关联的对象。

因此,没有全删除孤儿。这意味着,如果我们更改<many-to-one>的引用,我们无法从孤儿删除中获益。唯一的办法是明确和手动删除...