gpt4 book ai didi

c# - AsNoTracking 和删除

转载 作者:行者123 更新时间:2023-11-30 20:31:13 24 4
gpt4 key购买 nike

我正在尝试使用这段代码从数据库中删除一行

public ListPicture GetPicture(string Id)
{
ListPicture pic = Pictures.AsNoTracking().FirstOrDefault(x => x.pId == Id);
return pic;
}

public void DeletePicture(string Id)
{
ListPicture pic = GetPicture(Id);
if( pic != null)
{
Pictures.Remove(pic);
}
SaveChanges();
}

删除时我有这个错误

System.InvalidOperationException: The object cannot be deleted because it was not found in the ObjectStateManager.

我尝试将实体图片附加到图片

public void DeletePicture(string Id)
{
ListPicture pic = GetPicture(Id);
if( pic != null)
{
Pictures.Attach(pic);
Pictures.Remove(pic);
}
SaveChanges();
}

这是错误的是:

System.InvalidOperationException: Attaching an entity of type 'Album.DatabaseContext.ListPicture' failed because another entity of the same type already has the same primary key value.

GetPicture函数在我的应用程序中被多次使用,我该如何解决这个问题

最佳答案

当您使用 AsNoTracking 时,EF 不会维护已加载到代理中的实体的数据。也就是说,它是一个不再依赖 EF 的实体。

但是,这个实体存在于数据库中。尝试执行 Attach 时,EF 会检查是否已存在具有相同 ID 的人并抛出异常。

我的建议是:

1: 从 GetPicture 方法中删除 AsNoTracking。2:如果不能,请像这样创建删除方法:

public ListPicture GetPicture(string Id)
{
ListPicture pic = Pictures.AsNoTracking().FirstOrDefault(x => x.pId == Id);
return pic;
}

public void DeletePicture(string Id)
{
ListPicture pic = Pictures.Find(id);
if( pic != null)
{
Pictures.Remove(pic);
}
SaveChanges();
}

关于c# - AsNoTracking 和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43527086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com