从另一个模型更新实体模型

时间:2012-11-09 06:19:09

标签: c# entity-framework entity-framework-4

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

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

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

我该怎么做?

1 个答案:

答案 0 :(得分: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);
    }
  }
}

如果你想要,你甚至可以通过从EF模型获取关键字段并对key进行一些反思来分解entity参数,但这可能会显着减慢过程。

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