不知道记录是否存在时,如何使用Entity Framework进行合并?

约书亚·弗兰克(Joshua Frank)

关于Entity Framework和MERGE的SO答案中,如何编写代码的示例如下:

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

假设您已经知道要升级的实体是否存在;在这种情况下,请检查entity.Id但是,如果您不知道该商品是否存在该怎么办?例如,就我而言,我正在将供应商的记录导入到数据库中,并且给定的记录可能已经导入,也可能尚未导入。我想更新记录(如果存在),否则添加它。但是两种情况下都已经设置了供应商的ID。

除非我简单地询问数据库记录是否已经存在,否则我看不到任何处理方法,这违背了MERGE的全部目的。

迈克布里奇

如果您想要一个没有存储过程的原子数据库UPSERT命令,并且您不担心上下文被更新,那么值得一提的是,您还可以MERGEExecuteSqlCommand调用中包装一个嵌入式语句

public void SaveOrUpdate(MyEntity entity)
{
    var sql =  @"MERGE INTO MyEntity
                USING 
                (
                   SELECT   @id as Id
                            @myField AS MyField
                ) AS entity
                ON  MyEntity.Id = entity.Id
                WHEN MATCHED THEN
                    UPDATE 
                    SET     Id = @id
                            MyField = @myField
                WHEN NOT MATCHED THEN
                    INSERT (Id, MyField)
                    VALUES (@Id, @myField);"

    object[] parameters = {
        new SqlParameter("@id", entity.Id),
        new SqlParameter("@myField", entity.myField)
    };
    context.Database.ExecuteSqlCommand(sql, parameters);
}

这不是很漂亮,因为它在EF对实体的抽象之外起作用,但是它将允许您利用该MERGE命令。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不知道记录是否存在时,如何使用Entity Framework进行合并?

来自分类Dev

不知道如何使用外部窗格进行GUI

来自分类Dev

Java Clock模拟,不知道如何进行...

来自分类Dev

当robots.txt告诉我们是否不知道URL属于哪个文件夹时,我们如何知道可以对哪些URL进行爬网?

来自分类Dev

在 Entity Framework 中使用预先加载时,如何知道是否包含相关数据?

来自分类Dev

当您不知道主键时,使用T检索记录

来自分类Dev

当您不知道主键时,使用T检索记录

来自分类Dev

我不知道如何将我的属性合并到此查询的单个列中

来自分类Dev

如何知道git中是否正在进行合并

来自分类Dev

尝试使用Excel进行合并-需要合并

来自分类Dev

使用XStream读取XML进行对象处理时,如果我不知道XML将具有多少个字段怎么办?

来自分类Dev

R如何在不知道长度的情况下进行for循环?

来自分类Dev

用于构建增强效果的“ stage”参数:“不知道如何进行<e> stage”

来自分类Dev

如何在不知道宽度或高度的情况下最好地对矩形的角进行排序?

来自分类Dev

如何在不知道确切OU的情况下进行LDAP查询

来自分类Dev

如何在不知道其实现的情况下对堆栈ADT进行单元测试

来自分类Dev

在不知道成员类型的情况下如何与SFINAE进行检查?

来自分类Dev

用casperjs进行爬取-不知道如何处理空div

来自分类Dev

不知道如何将触摸作为单个实体进行处理

来自分类Dev

如何在不知道 Enum 本身的情况下对 Enum.GetValues 的结果进行排序

来自分类Dev

我需要使用ArrayList类对数组进行排列。我不知道怎么了

来自分类Dev

不确定是否可以过滤我要分析的数据,不知道是否可以在excel中进行

来自分类Dev

如何知道在处理单个记录时是否进行了“包含”调用?

来自分类Dev

使用窗帘进行图像合并

来自分类Dev

使用Lodash进行深度合并

来自分类Dev

在不知道ID的情况下进行更新

来自分类Dev

在不知道ID的情况下进行更新

来自分类Dev

我将如何减少此数组,以便每个对象都合并为javascript,但不知道键值名称

来自分类Dev

我将如何减少此数组,以便每个对象都合并为javascript,但不知道键值名称

Related 相关文章

  1. 1

    不知道记录是否存在时,如何使用Entity Framework进行合并?

  2. 2

    不知道如何使用外部窗格进行GUI

  3. 3

    Java Clock模拟,不知道如何进行...

  4. 4

    当robots.txt告诉我们是否不知道URL属于哪个文件夹时,我们如何知道可以对哪些URL进行爬网?

  5. 5

    在 Entity Framework 中使用预先加载时,如何知道是否包含相关数据?

  6. 6

    当您不知道主键时,使用T检索记录

  7. 7

    当您不知道主键时,使用T检索记录

  8. 8

    我不知道如何将我的属性合并到此查询的单个列中

  9. 9

    如何知道git中是否正在进行合并

  10. 10

    尝试使用Excel进行合并-需要合并

  11. 11

    使用XStream读取XML进行对象处理时,如果我不知道XML将具有多少个字段怎么办?

  12. 12

    R如何在不知道长度的情况下进行for循环?

  13. 13

    用于构建增强效果的“ stage”参数:“不知道如何进行<e> stage”

  14. 14

    如何在不知道宽度或高度的情况下最好地对矩形的角进行排序?

  15. 15

    如何在不知道确切OU的情况下进行LDAP查询

  16. 16

    如何在不知道其实现的情况下对堆栈ADT进行单元测试

  17. 17

    在不知道成员类型的情况下如何与SFINAE进行检查?

  18. 18

    用casperjs进行爬取-不知道如何处理空div

  19. 19

    不知道如何将触摸作为单个实体进行处理

  20. 20

    如何在不知道 Enum 本身的情况下对 Enum.GetValues 的结果进行排序

  21. 21

    我需要使用ArrayList类对数组进行排列。我不知道怎么了

  22. 22

    不确定是否可以过滤我要分析的数据,不知道是否可以在excel中进行

  23. 23

    如何知道在处理单个记录时是否进行了“包含”调用?

  24. 24

    使用窗帘进行图像合并

  25. 25

    使用Lodash进行深度合并

  26. 26

    在不知道ID的情况下进行更新

  27. 27

    在不知道ID的情况下进行更新

  28. 28

    我将如何减少此数组,以便每个对象都合并为javascript,但不知道键值名称

  29. 29

    我将如何减少此数组,以便每个对象都合并为javascript,但不知道键值名称

热门标签

归档