0
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 是 Objectives 表中的外键。

你能提出什么问题吗?

4

1 回答 1

1

您可以使用自定义 sql-delete 防止删除 Objectives 表,但还要求所有 Objectives 都具有对 Review 行的引用。这应该如何工作?这还要求永远不要删除评论。

如果您删除 Objectives.ReviewId 列上的外键约束,则可以使用这种方法,但我不建议这样做。由于已删除评论行的 ID 对历史记录没有帮助,因此更好的方法是使 Objectives.ReviewId 列可为空,并在您的自定义 sql-delete 中将其清空。

于 2013-05-14T07:58:03.980 回答