2014-10-07 25 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>的引用,我們無法從孤兒刪除中獲益。唯一的辦法是明確和手動刪除...