c# - 在软删除上更新外键
问题描述
我的数据库中有 2 行。
Category
和Movie
。
当我软删除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
,然后只有在该类别没有任何引用时才能删除该类别。
解决方案
CategoryId
是否存在 = 0的条目?它可能不会,这就是您收到错误的原因。您在这里有两种方法:
创建一个虚拟的“已删除”类别,Id = 0(我个人更喜欢-1),在软删除时更新它
如果字段允许,则设置
CategoryId
为。这意味着与此记录的类别无关。NULL
NULLs
推荐阅读
- ruby-on-rails - 如何从 ruby on rails 中删除 https 和 http
- sql-server - SQL Server 多数据库安全问题
- python - 从 main 中的类调用函数
- scala - 使用带有子类型参数的超级方法
- python - 将python输出放入数据框中的问题
- matlab - 上下分屏实验
- node.js - 我想在运行 nightmare.js 后获取 gig 中的所有数据,但我不断得到 gig 未定义
- javascript - 将鼠标悬停在 Javascript 和/或 CSS 列表中的相应单词上时,如何显示不同的图像?
- python - 训练和验证的不同 Keras 增强
- oracle - 在 SQL Server 中有一个我想在 Oracle 中复制的计数器