0

鉴于以下 UPSERT 之类的场景:

EntityType myEntity = null;
if(newItem)
{
   myEntity = new EntityType();
}
else
{
  myEntity = context.TableName.Where(item => item.PrimaryKey == key).Single();
}

if(newItem)//This check bugs me
{
  context.TableName.Add(myEntity);//conditionally add the item to the context
}

context.SaveChanges();

我必须确定是否需要将项目添加到上下文中。实体框架是否提供任何类型的context.TableName.NewRow()或类似的方法来保存最后的条件检查?这样我就可以做这样的事情了......

EntityType myEntity = null;
if(newItem)
{
   myEntity = context.TableName.NewRow();
}
else
{
  myEntity = context.TableName.Where(item => item.PrimaryKey == key).Single();
}   

context.SaveChanges();

一个通用的扩展方法应该为我完成这个简单的任务,只是看起来很奇怪(如果)这在框架中不存在。

4

3 回答 3

1

这样的事情对你有用吗?

EntityType myEntity = null;
if(newItem)
{
   context.TableName.Add(myEntity = new EntityType());
}
else
{
  myEntity = context.TableName.Where(item => item.PrimaryKey == key).Single();
}   

context.SaveChanges();
于 2013-07-29T21:08:01.650 回答
0

标准 EF 功能在这里可能有用

 Context.Set<TPoco>().AddOrUpdate(poco); 
于 2013-07-29T23:09:16.187 回答
0

看来这在 EF 中不可用,我创建了自己的扩展来执行此操作:

    public static T NewRow<T>(this System.Data.Entity.DbSet<T> entity) where T : class, new()
    {
        T t = new T();
        entity.Add(t);
        return t;
    }
于 2013-07-29T21:31:11.033 回答