实体框架更新DbContext

时间:2017-11-06 08:20:58

标签: entity-framework entity-framework-6

我有一个像这样的Repository项目。

https://github.com/tugberkugurlu/GenericRepository/tree/master/src

我有一个方法。

public void Edit(TEntity entity)
{
   _dbContext.SetAsModified(entity);
}


public void SetAsAdded<TEntity>(TEntity entity) where TEntity : class
{
   DbEntityEntry dbEntityEntry = GetDbEntityEntrySafely(entity);
   dbEntityEntry.State = EntityState.Added;
}

但我正在获得更新记录。我有时会得到这个错误。

  

附加“TP.Model”类型的实体失败,因为   另一个相同类型的实体已经拥有相同的主键   值。使用“附加”方法或设置时可能会发生这种情况   如果实体中有任何实体,则实体的状态为“未更改”或“已修改”   图表具有冲突的键值。这可能是因为某些实体   是新的,尚未收到数据库生成的键值。在   这种情况使用“添加”方法或“已添加”实体状态进行跟踪   图表然后将非新实体的状态设置为“未更改”或   “适当修改”。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。我检查了第一列。之后,我做了类似的事情。

_dbSet = dbContext.DbSet<TEntity>();

剩下的就是蛋糕了。

_dbSet.Attach(entity);
                DbEntityEntry entry = _dbContext.Entry(entity);
                foreach (var proprty in entry.OriginalValues.PropertyNames)
                {
                    var Current = entry.CurrentValues.GetValue<object>(proprty);
                    var New = entry.GetDatabaseValues().GetValue<object>(proprty);

                    if (Current != null)
                    {
                        if (!object.Equals(New, Current))
                        {
                            entry.Property(proprty).IsModified = true;
                        }
                    }
                }