亚音速3 - 插入更新

时间:2011-09-08 07:26:33

标签: subsonic subsonic3 subsonic-active-record

目前正在使用带有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
 }

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

你也应该能够这样做:

            // 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文件)。


修改

哦,对不起,当我最简单地阅读你的问题时,我认为你要求更简单的方法来“插入”或“更新”,但在重新阅读之后,我意识到你要求“插入,或者如果它已经存在则更新”就像做'upsert'一样。

对不起,我的回答并没有涵盖那个。我也不知道这样做的好方法。我通常只是做你正在做的事情...尝试选择它,如果我没有得到结果,那就做插入。