我在過去幾周內第一次在一個項目中使用NHibernate(與Fluent-NHibernate映射),直到今天我遇到了問題(很可能是我自己的錯誤),一切都很順利。NHibernate,「在刪除級聯」,級聯刪除相關表中的行?
我做了一個小樣本,說明我想要實現:
public class Image
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string Path { get; set; }
}
public class FeaturedImage
{
public virtual int Id { get; set; }
public virtual Image Image { get; set; }
public virtual string Description { get; set; }
public virtual DateTime Date { get; set; }
}
public class ImageMap : ClassMap<Image>
{
public ImageMap()
{
Id(x => x.Id).GeneratedBy.Identity().UnsavedValue(0);
Map(x => x.Name);
Map(x => x.Path);
}
}
public class FeaturedImageMap : ClassMap<FeaturedImage>
{
public FeaturedImageMap()
{
Id(x => x.Id).GeneratedBy.Identity().UnsavedValue(0);
Map(x => x.Description);
Map(x => x.Date);
References(x => x.Image).Not.Nullable().Cascade.Delete();
}
}
在上面的例子中有多個圖片,每天一個形象得到回升爲「特色」的形象,相同的圖像可以多次顯示。我想要的行爲是當我刪除圖像時,任何引用該圖像ID的FeaturedImage條目都會自動被刪除。然而,此刻,如果我嘗試刪除它已收錄它拋出一個錯誤的圖片:
The DELETE statement conflicted with the REFERENCE constraint "FKF42D8269692640D". Conflict table "dbo.FeaturedImage", column 'Image_id'.
如果如果手動添加「ON DELETE CASCADE」,以它的工作原理的圖像ID外鍵約束:
alter table [FeaturedImage]
add constraint FKF42D8269692640D foreign key (Image_id) references [Image] ON DELETE CASCADE
...但我不確定這是否是推薦的方式?如果任何人可以建議實現這一點的最佳方式,將不勝感激!提前致謝。
謝謝!我從FeaturedImageMap中刪除了'.Cascade.Delete()'並向ImageMap添加了'HasMany(x => x.Featured).Inverse()。ForeignKeyCascadeOnDelete()。KeyColumn(「Image_id」);似乎現在正在完美工作。 –