2012-02-11 52 views
0

我试图做我的尽职调查,并阅读了很多这里的问题,我无法解决我的问题。我有一个非常简单的模式。我期待了一个get方法的记录(用适当的WHERE子句,让我感兴趣的记录):为什么我不能用dbContext更新记录?

public IQueryable<TDataModel> Get<TDataModel>() where TDataModel : class, IDataModel 
{ 
    return _context.Set<TDataModel>(); 
} 

然后我修改无论该对象我感兴趣的,然后我通过了修改后的性能反对的更新方法:

public TDataModel Update<TDataModel>(TDataModel item) where TDataModel : class, IDataModel 
{ 
    _context.Set<TDataModel>().Attach(item); 
    _context.Entry<TDataModel>(item).State = EntityState.Modified; 
    _context.SaveChanges(); 
    return item; 
} 

我总是拥有得天独厚的以下内容:

与对象相同的密钥已经存在于ObjectStateManager。 ObjectStateManager无法使用相同的 键追踪多个对象。

我已经尝试了许多解决方案中提出的很多这里提出的问题无济于事。

+1

何时发生错误?在'.Attach(item)'或'.SaveChanges'上? – 2012-02-11 15:34:22

+0

在.Attach(item) – TheHurt 2012-02-11 15:43:17

+1

我知道你可能已经通过了这个,但是你在查询和'.Attach(item)'之间的相同数据上下文吗? – 2012-02-11 15:44:50

回答

1

因为实体框架使用更改跟踪(默认情况下......但您可以使用不同的MergeOptions关闭它),所以不能使用相同的键(在相同的上下文中)附加两个实体。

因此,您必须首先分离旧对象,或者简单地不附加新对象(因为更改跟踪器已为您执行此项工作)。

相关问题