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