2014-10-07 3 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) каскад (опционально): Определяет, какие операции должны быть каскадируется от родительского объекта к связанному объекту.

Таким образом, нет all-delete-orphan. И это означает, что если мы изменим ссылку на <many-to-one>, мы не сможем извлечь выгоду из удаления сирот. Единственный способ - удалить явно и вручную ...

Смежные вопросы