Subsonic 亚音速3-插入更新

Subsonic 亚音速3-插入更新,subsonic,subsonic3,subsonic-active-record,Subsonic,Subsonic3,Subsonic Active Record,目前正在使用亚音速3和Activerecord。纯粹出于好奇,是否有一种简单的方法来更新或插入一个记录,以一种干净和周到的方式 而不是 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 =

目前正在使用亚音速3和Activerecord。纯粹出于好奇,是否有一种简单的方法来更新或插入一个记录,以一种干净和周到的方式

而不是

 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
 }

您还应该能够这样做:

            // 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();
//使用linq表达式执行插入
db.Insert.Into(
x=>x.项目编号,
x=>x.ITEM\u CLASS\u代码,
x=>x.ITEM\u说明,
x=>x.制造商
).价值观(
“测试”,
“测试”,
“测试”,
“测试”
).Execute();
//使用linq表达式更新
db.Update()
.Set(x=>x.ITEM_DESCRIPTION==“已更新”,
x=>x.ITEM\u CLASS\u CODE==“UPDATED2”)
.其中(x=>x.项目编号==“测试”)
.Execute();
//使用linq表达式删除插入的行
db.Delete(x=>x.ITEM_NUMBER==“TEST”).Execute();
至少我在我的一个项目中就是这样做的。
Insert()
Update()
Delete()
方法由
Context.tt
生成到
Context.cs
文件中(我使用的是“ActiveRecord”T4文件)


编辑

哦,对不起,当我读到你的问题时,我以为你在要求一种更简单的方式来“插入”或“更新”,但在重读之后,我意识到你要求的是“插入,或更新,如果它已经存在”,就像做“插入”一样


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

您也可以这样做:

            // 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();
//使用linq表达式执行插入
db.Insert.Into(
x=>x.项目编号,
x=>x.ITEM\u CLASS\u代码,
x=>x.ITEM\u说明,
x=>x.制造商
).价值观(
“测试”,
“测试”,
“测试”,
“测试”
).Execute();
//使用linq表达式更新
db.Update()
.Set(x=>x.ITEM_DESCRIPTION==“已更新”,
x=>x.ITEM\u CLASS\u CODE==“UPDATED2”)
.其中(x=>x.项目编号==“测试”)
.Execute();
//使用linq表达式删除插入的行
db.Delete(x=>x.ITEM_NUMBER==“TEST”).Execute();
至少我在我的一个项目中就是这样做的。
Insert()
Update()
Delete()
方法由
Context.tt
生成到
Context.cs
文件中(我使用的是“ActiveRecord”T4文件)


编辑

哦,对不起,当我读到你的问题时,我以为你在要求一种更简单的方式来“插入”或“更新”,但在重读之后,我意识到你要求的是“插入,或更新,如果它已经存在”,就像做“插入”一样


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

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

希望它有Rails的find\u或create helper方法:PIt是一个开源项目。。。请随意添加一个;)不幸的是,这是那些没有得到很好支持的事情之一。Ansi sql提供了一个
合并到
语句中,但不是每个DB都实现它。有些有自己的语法。我不认为不可能增加亚音速。为每个受支持的数据库添加并测试它只是一些工作。只希望它有Rails的find_或create helper方法:PIt是一个开源项目。。。请随意添加一个;)不幸的是,这是那些没有得到很好支持的事情之一。Ansi sql提供了一个
合并到
语句中,但不是每个DB都实现它。有些有自己的语法。我不认为不可能增加亚音速。为每个受支持的DB添加它,并对其进行测试,这只是一些工作。