一个实体对象不能被多个IEntityChangeTracker"试图将实体保存到bd时出错
本文关键字:实体 保存 bd quot 出错 IEntityChangeTracker 一个 对象 不能 | 更新日期: 2023-09-27 18:11:10
我正在尝试以异步方式更新实体。这就是我的更新方法的样子
public async Task<bool> UpdateEntityAsync<T>(IDbContext source, T entity) where T : class
{
try
{
source.Entry(entity).State = EntityState.Modified; // here I get error
await source.SaveChangesAsync();
return true;
}
catch (Exception ex)
{
return false;
}
}
This is my Interface IDbContext
public interface IDbContext
{
DbSet<T> Set<T>() where T: class;
Task<int> SaveChangesAsync();
DbEntityEntry<T> Entry<T>(T entity) where T : class;
}
和我调用方法UpdateEntityAsync从按钮点击
public async override void ButtonClick(object sender)
{
ComboboxSelectedValue.IsValid = 0;
var result = await ViewModel.Instance.Repository.UpdateEntityAsync(new Entities(), ComboboxSelectedValue);
if (result)
{
StatusBarText = "Changed";
return;
}
StatusBarText = "Some error, record's state not changed!";
}
所以错误说一个实体对象不能被IEntityChangeTracker的多个实例引用,但我发送新的实例,所以我真的不明白为什么我得到这个错误以及如何解决这个问题。
我想我找到解决办法了。我把IDbContext改成
public interface IDbContext
{
DbSet<T> Set<T>() where T: class;
Task<int> SaveChangesAsync();
void MarkAsModified<T>(T entity) where T : class;
}
然后实现了MarkAsModified:
public void MarkAsModified<T>(T entity) where T : class
{
Entry(entity).State = EntityState.Modified;
}
现在我的UpdateEntityAsync看起来像
public async Task<bool> UpdateEntityAsync<T>(IDbContext source, T entity) where T : class
{
try
{
source.MarkAsModified(entity);
await source.SaveChangesAsync();
return true;
}
catch (Exception ex)
{
return false;
}
}
希望对大家有所帮助