Я впервые использовал NHibernate (с сопоставлениями Fluent-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();
}
}
В приведенном выше примере есть несколько изображений, каждый день одно изображение выбирается как «избранное», одно и то же изображение может быть фигурирует несколько раз. Я бы хотел, чтобы при удалении изображения все записи FeaturedImage, ссылающиеся на этот идентификатор изображения, автоматически удалялись. Однако в настоящий момент, если я пытаюсь удалить изображение, которое было показано, оно выдает ошибку:
Оператор DELETE вступает в конфликт с ограничением REFERENCE «FKF42D8269692640D». Таблица конфликтов «dbo.FeaturedImage», столбец «Image_id».
Если вручную добавить «ON DELETE CASCADE» к ограничению внешнего ключа идентификатора изображения, это сработает:
alter table [FeaturedImage]
add constraint FKF42D8269692640D foreign key ( Image_id ) references [Image] ON DELETE CASCADE
... но я не уверен, что это рекомендуемый способ сделать это? Если бы кто-нибудь мог посоветовать лучший способ достижения этого, мы были бы очень признательны! Заранее спасибо.