【发布时间】:2011-07-26 12:25:20
【问题描述】:
我试图弄清楚如何将分离实体的特定属性标记为已修改。如果我执行以下操作,它将标记所有属性已修改,并且生成的 sql 将更新所有列。
/// <summary>
/// Sets the entity in the modified state.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="entity">The entity.</param>
void IDbContext.Modified<T>(T entity)
{
DbEntityEntry<T> entry = Entry(entity);
if (entry.State == EntityState.Modified)
{
// if the state is already Modified we don't need to do anything else
return;
}
if (entry.State == EntityState.Detached)
{
Set<T>().Attach(entity);
//TODO: set specific properties modified instead of the the whole object.
entry.State = EntityState.Modified;
}
}
如何将仅更改的属性设置为已修改?
我正在尝试在实现DbContext 的类中使用它,该类将由通用存储库使用。目标是自动确定哪些属性与数据库值相比发生了更改,然后将这些更改的属性状态设置为已修改。在我当前的实现中,Modified 方法不知道实体类型,所以我不能简单地用context.Set<T>.Find(key) 检索它。
我想我可以添加一个接受 originalEntity 参数的重载,但如果可能的话我宁愿不这样做。
void IDbContext.Modified<T>(T entity, T originalEntity)
{
DbEntityEntry<T> entry = Entry(entity);
if (entry.State == EntityState.Modified)
{
// if the state is already Modified we don't need to do anything else
return;
}
if (entry.State == EntityState.Detached)
{
Set<T>().Attach(entity);
entry.OriginalValues.SetValues(originalEntity);
}
}
【问题讨论】:
标签: entity-framework entity-framework-4.1 ef-code-first