public class ReviewMap : ClassMapBase<Review>
{
public ReviewMap()
{
Table("Reviews");
List(x => x.Objectives, m =>
{
m.Table("Objectives");
m.Cascade(Cascade.All.Include(Cascade.DeleteOrphans));
m.Key(k => k.Column("ReviewId"));
m.Where("DeletionDate is null");
m.OrderBy("OrderNo");
m.Index(x => x.Column("OrderNo"));
m.Inverse(true);
}, m => m.OneToMany());
}
public class ObjectiveMap : ClassMapBase<Objective>
{
public ObjectiveMap()
{
Table("Objectives");
// Use "soft deletes" to allow us to capture results against deleted items
Where("DeletionDate is null");
SqlDelete("update Objectives set DeletionDate = getutcdate(), OrderNo = 1 where id=?");
ManyToOne(x => x.Review, m =>
{
m.Column("ReviewId");
m.NotNullable(true);
});
Property(x => x.Details, m =>
{
m.NotNullable(true);
m.Length(1000);
m.Column("Details");
});
Property("OrderNo", m =>
{
m.NotNullable(false);
});
}
}当我试图删除评论时,它给我的错误外键约束在目标表中。因为ReviewId是目标表中的外键。
你能建议一下问题出在哪里吗?
发布于 2013-05-14 15:58:04
您可以使用自定义sql-delete防止删除Objectives表中的内容,但也要求所有目标都有一个对Review行的引用。这应该如何工作呢?这也要求永远不要删除评论。
一种可行的方法是删除Objectives.ReviewId列上的外键约束,但我不建议这样做。由于删除的Review行的ID不能帮助您进行历史记录,因此更好的方法是使Objectives.ReviewId列可为空,并在自定义sql-delete中将其设为空。
https://stackoverflow.com/questions/16537611
复制相似问题