У меня есть отношение многие-к-одному между объектами Product
и Supplier
. Мне нужно иметь возможность удалить Supplier
без удаления принадлежащих ему Product
.
Вот упрощенная версия классов:
public class Supplier {
public virtual IList<Product> Products { get; protected set; }
}
public class Product {
// Product belongs to a Category but Supplier is optional
public virtual Supplier Supplier { get; set; }
public virtual Category Category { get; set; }
}
Я использую FluentNHibernate, но вот сопоставления, которые он производит:
<bag name="Products" cascade="save-update" inverse="true">
<key column="SupplierID" />
<one-to-many class="Me.Product, Me, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</bag>
<many-to-one name="Supplier" column="SupplierID" />
Это создает внешний ключ в таблице «Продукты», поэтому, когда я пытаюсь выполнить прямое удаление поставщика, я получаю ошибку ограничения внешнего ключа. Я попытался изменить каскад на «все» в надежде, что он может только удалить связь, но он удалил все Продукты и их другие связанные объекты.
Единственный способ решить эту проблему прямо сейчас - это выполнить итерацию коллекции Products поставщика и установить для свойства Supplier значение null. Есть ли способ, которым я могу добиться этого поведения с помощью сопоставления?