Entity Framework 中的 MERGE

13

有没有一种方法可以从.NET Entity Framework 4调用T-Sql的MERGE命令?

1个回答

12

没有这样的内置功能 - 您必须自己构建。非常常见的方法是:

public void SaveOrUpdate(MyEntity entity)
{
    if (entity.Id == 0)
    {
        context.MyEntities.AddObject(entity);
    }
    else
    {
        context.MyEntities.Attach(entity);
        context.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified);
    }

    // You can call SaveChanges here or you can call it separately after multiple changes
}

这是一个处理在数据库中具有自动生成Id的脱离实体(IDENTITY)的示例。新实体的默认Id始终为0,因为实际值将在保存更改时分配。


谢谢。但是,当使用DDD并附加聚合根时,如果有几个级别的嵌套属性,则需要进行某种形式的递归。是否有一些示例?(EF团队期望开发人员自己处理这种常见情况,而其他ORM(如NHibernate)则在开箱即用时提供合并功能,这使事情变得更加令人迷惑)。 - Mickey Puri
5
但是如果您不知道对象是否已经存在于数据库中呢?MERGE语句正是用于确定对象是否存在,如有需要则进行更新或插入。 - Joshua Frank
2
你漏掉了删除部分。 - Azimuth
@JoshuaFrank 这就是 if (entity.Id == 0) 的作用;假设在数据库中,Id 从1开始。 - Tom Blodget

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接