目前正在使用带有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
}
答案 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'一样。
对不起,我的回答并没有涵盖那个。我也不知道这样做的好方法。我通常只是做你正在做的事情...尝试选择它,如果我没有得到结果,那就做插入。