Jan*_* SL 7 nhibernate cascade fluent-nhibernate cascading-deletes
在过去的几周里,我一直在项目中使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,有多个图像,每天一个图像被选为"特色"图像,同一图像可以多次显示.我想要的行为是当我删除图像时,引用该图像ID的任何FeaturedImage条目会自动被删除.但是,目前如果我尝试删除已经显示的图像,则会抛出错误:
DELETE语句与REFERENCE约束"FKF42D8269692640D"冲突.冲突表"dbo.FeaturedImage",列'Image_id'.
如果如果手动将"ON DELETE CASCADE"添加到图像ID外键约束,则它可以工作:
alter table [FeaturedImage]
add constraint FKF42D8269692640D foreign key ( Image_id ) references [Image] ON DELETE CASCADE
Run Code Online (Sandbox Code Playgroud)
...但我不确定这是否是推荐的做法?如果有人可以建议实现这一目标的最佳方式,将不胜感激!提前致谢.
将.Cascade.Delete()你添加的是这种关系的反面,它实际上会导致当你删除一个FeaturedImage图像被删除.
您可以通过在Image中创建一个FeaturedImage集合来完成您想要做的事情,将其映射为一个反向包,并在键中删除级联.
我不使用Fluent,但是在XML中你设置on-delete="cascade"了collection <key>元素; 寻找类似的东西.
| 归档时间: |
|
| 查看次数: |
2641 次 |
| 最近记录: |