首页 > 解决方案 > 在软删除上更新外键

问题描述

我的数据库中有 2 行。 CategoryMovie

当我软删除Movie时,我想删除对Category.

我有一个如下所示的删除方法:

        public override async Task DeleteAsync(long id, bool permanent = false)
        {
            await DbFactory.ExecAsync(async (db) =>
            {
                if (permanent)
                {

                    await db.DeleteAsync<Movie>(x => x.Id == id);
                }
                else
                {
                    await db.UpdateAsync<Movie>(new { Deleted = true, CategoryId = 0 }, x => x.Id == id);
                }
            });
        }

但是当我尝试更新时它会引发 FK 异常CategoryId

我怎样才能做到这一点?我希望能够软删除 a Movie,然后只有在该类别没有任何引用时才能删除该类别。

标签: c#sqlforeign-keys

解决方案


CategoryId是否存在 = 0的条目?它可能不会,这就是您收到错误的原因。您在这里有两种方法:

  1. 创建一个虚拟的“已删除”类别,Id = 0(我个人更喜欢-1),在软删除时更新它

  2. 如果字段允许,则设置CategoryId为。这意味着与此记录的类别无关。NULLNULLs


推荐阅读