【问题标题】:Subsonic 3 - Insert of Update亚音速 3 - 更新插入
【发布时间】:2011-09-08 07:26:33
【问题描述】:

目前使用带有 Activerecord 的 Subsonic 3。纯粹出于好奇,有没有一种简单的方法可以以简洁明了的方式更新或插入记录?

代替

 var record = MyModal.SingleOrDefault(x => x.id == 1)
 if (record != null)
 {
     // code to update record here
 } else {
    // code to insert a record here
    MyModal record = new MyModal();
    record.attribute1 = "blah"
    ... blah blah
 }

【问题讨论】:

    标签: subsonic subsonic3 subsonic-active-record


    【解决方案1】:

    标准的 ActiveRecord 模板提供了一个 Save() 方法,根据对象是否为 IsNew() 调用 Add() 或 Update()。它应该适用于您提供的示例。

    【讨论】:

      【解决方案2】:

      你也应该可以这样做:

                  // perform insert with a linq expression
                  db.Insert.Into<PARTS_VI_PART_NUMBER>(
                      x => x.ITEM_NUMBER,
                      x => x.ITEM_CLASS_CODE,
                      x => x.ITEM_DESCRIPTION,
                      x => x.MANUFACTURER
                  ).Values(
                      "TEST",
                      "TEST",
                      "TEST",
                      "TEST"
                  ).Execute();
      
                  // update using linq expression
                  db.Update<PARTS_VI_PART_NUMBER>()
                      .Set(x => x.ITEM_DESCRIPTION == "UPDATED",
                           x => x.ITEM_CLASS_CODE == "UPDATED2")
                      .Where(x => x.ITEM_NUMBER == "TEST")
                      .Execute();
      
                  // delete inserted row with a linq expression
                  db.Delete<PARTS_VI_PART_NUMBER>(x => x.ITEM_NUMBER == "TEST").Execute();
      

      至少我在我的一个项目中就是这样做的。 Insert()Update()Delete() 方法由Context.tt 生成到Context.cs 文件中(我使用的是“ActiveRecord”T4 文件)。


      编辑

      对不起,当我第一次看到你的问题时,我以为你在问一个更简单的方法来“插入”或“更新”,但是在重新阅读之后,我意识到您要求“插入,如果它已经存在则更新”,就像执行“更新插入”一样。

      对不起,我的回答并没有真正涵盖这一点。我也不知道有什么好办法。我通常只是最终做你正在做的事情......尝试选择它,如果我没有得到结果,请执行插入。

      【讨论】:

      • 希望它有 Rails 的 find_or_create 辅助方法:P
      • 这是一个开源项目...随意添加一个 ;) 不幸的是,这是没有得到很好支持的事情之一。 Ansi sql 提供了merge into 语句,但并非每个数据库都实现它。有些有自己的语法。我不认为添加到 SubSonic 是不可能的。为每个受支持的数据库添加它并进行测试只是一些工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多