【问题标题】:Entity Framework Update DbContext实体框架更新 DbContext
【发布时间】:2017-11-06 08:20:58
【问题描述】:

我有一个这样的存储库项目。

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”类型的实体失败,因为 另一个相同类型的实体已经具有相同的主键 价值。使用“附加”方法或设置 如果实体中有任何实体,则实体的状态为“未更改”或“已修改” 图有冲突的键值。这可能是因为某些实体 是新的,尚未收到数据库生成的键值。在 这种情况下使用 'Add' 方法或 'Added' 实体状态来跟踪 图表,然后将非新实体的状态设置为“未更改”或 酌情“修改”。

【问题讨论】:

  • 看了一遍又一遍,不明白有问题。
  • 调试您的上下文 dbset Local 集合...如果它已经包含具有您的 ID 的实体,那么您的代码可能会失败。但是,您没有显示足够的代码,因此我们无法确定问题所在。
  • 我已经添加了完整的代码链接@grek40
  • 不,您需要添加代码的使用方式,而不仅仅是存储库的设计方式。因为存储库的退出方式意味着,如果您以错误的方式使用它,您将收到此错误。

标签: entity-framework entity-framework-6


【解决方案1】:

我解决了这样的问题。我检查了第一列。后来,我做了这样的事情。

_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;
                        }
                    }
                }

【讨论】:

    猜你喜欢
    • 2017-05-14
    • 1970-01-01
    • 2013-12-26
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    相关资源
    最近更新 更多