我的数据库中有2行。
Category
和Movie
。
当我软删除Movie
时,我想删除对Category
的FK引用。
我有一个如下删除方法:
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);
}
});
}
但是当我尝试更新CategoryId
我该怎么做?
我希望能够软删除Movie
,然后仅在类别没有任何引用的情况下才能删除该类别。
答案 0 :(得分:0)
是否存在CategoryId
= 0的条目?可能没有,这就是为什么您遇到错误。这里有两种方法:
创建一个虚拟的“已删除”类别,其ID = 0(我个人比较喜欢-1),在轻度删除时对其进行更新
如果该字段允许CategoryId
,则将NULL
设置为NULLs
。这意味着此记录与类别无关。
答案 1 :(得分:0)
如果我是你,这些就是步骤
检查是否有Any
个电影具有相同的类别ID,但ID与要删除的电影不同
如果是,则仅删除电影
如果没有,则删除类别和级联(如果不可能,则先删除电影,然后再删除类别)
还有一个并发问题要处理。如果有两个类别的电影又被同时删除怎么办?这可能会导致以下问题:在不同线程中删除了影片,并且两个线程都检查是否还有其他影片,并且对于每个影片,在删除之前都找到了另一个影片。为了应对这种情况,我建议创建某种删除电影队列,当要删除电影时,它将进入队列。这种顺序删除影片的方式将解决并发问题。