0

在我的代码中,我有几行代码,如下所示:

Insertions["sale"] = (modelEntities, entity) => modelEntities.AddToSale((Sale) entity);

当数据库中没有这样的实体时,它工作正常。但是我想在实体已经在数据库中时更新它。它可以通过Find方法和字段分配来完成,但我想保留一个漂亮的代码并使用构造函数或Insert-or-Update.

我怎样才能做到这一点?

4

1 回答 1

1

我个人认为用 add/insert 方法委托构建字典是没有用的。这是很多重复的代码。上下文具有插入或更新任何实体对象的通用方法。您甚至可以创建一种方法,例如(基于ObjectContext):

public static void Upsert<T>(this ObjectContext context, T entity, int key)
  where T : EntityObject
{
  if (entity != null)
  {
    ObjectSet<T> objectSet = context.CreateObjectSet<T>();
    if (key > 0)
    {
      if (entity.EntityState == EntityState.Detached)
      {
        objectSet.Attach(entity);
        context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
      }
    }
    else
    {
      objectSet.AddObject(entity);
    }
  }
}

如果您愿意,您甚至可以key通过从 EF 模型中获取关键字段并对entity.

请注意,Attached此方法会忽略持久对象:假定它将由其已属于的上下文保存。

于 2012-11-10T13:27:24.323 回答