【发布时间】:2014-07-02 08:41:17
【问题描述】:
我正在尝试以异步方式更新实体。这就是我的更新方法的样子
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;
}
}
这是我的接口 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 的多个实例无法引用实体对象,但是我发送了新实例,所以我真的不明白为什么会出现此错误以及如何解决此问题。任何帮助表示赞赏。
【问题讨论】:
-
我敢打赌这会发生在您按下按钮的秒...?
-
第一次按时也会出现这种情况
-
在此之前您是否在上下文中加载了实体?
-
是的,我正在加载值(以在表单上显示信息)并将它们保存到 observableCollection。这个集合我绑定到组合框。在按下 ButtonClick 后,我想将所选值的 IsValid 设置为 0 并将更改保存到 db
标签: c# entity-framework asynchronous