创建更新插入函数 ASP.NET

Create Upsert Function ASP.NET

我是 asp.net 中的新人,我不知道这是否可行。我如何在 ASP.NET C# 中创建一个 UPSERT 函数,在其中更新实体,如果它不存在,它会自动插入该行。

我有这个collection/entity

名字travelRequest

namespace TRS.Entities
{
   [Table("travelRequest")]
    public class travelRequest
    {
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int travelRequestID { get; set; }
    //...
    public virtual IList<trTravelDest> trTravelDest { get; set; }
    //...
    }

虚拟列表 trTravelDest 包含

namespace TRS.Entities
{
    [Table("trTravelDest")]
    public class trTravelDest
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int trTravelDestID { get; set; }
        public int travelRequestID { get; set; } //fk from travelRequest table
        public virtual travelRequest travelRequest { get; set; }
      //...
    }
}

我在更新请求时使用此函数 Update(travelRequest travelRequest) 我的问题是当我在 trTravelDest 中添加新行时它会忽略或不会插入。我怎样才能让它自动检测 travelRequest.trTravelDest Update(parameter) 是否有新行并自动插入。

[HttpPost]
public ActionResult Update(travelRequest travelRequest)
{
if (TryUpdateModel(travelRequest))
 {try {
db.SaveChanges();
 // updateSuccessfull = true;
} catch{
 //  updateSuccessfull = false;}
}
var data = db.travelRequest.Find(travelRequest.travelRequestID);
return View("EditTr",data);
}

我认为 AddOrUpdate 方法正是您所需要的。

Adds or updates entities by key when SaveChanges is called. Equivalent to an "upsert" operation from database terminology. This method can be useful when seeding data using Migrations.

你使用的方法是这样的:

context.TravelRequests.AddOrUpdate(
    x => x.trTravelDestID,    // Assuming the travelRequest are unique on this key   
    travelRequestToUpsert);
context.SaveChanges();

第一个参数告诉函数 属性 它可以确定对象的唯一性。主键在这里是理想的。第二个(和第三个,...)是您要更新插入的对象。