创建Upsert函数
本文关键字:函数 Upsert 创建 | 更新日期: 2023-09-27 18:15:56
我是asp.net的新手,我不知道这是否可能。如何在ASP中创建一个UPSERT
函数?当你更新一个实体,如果它不存在,它会自动插入行。
我有这个集合/实体
name 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
-方法正是你所需要的。
调用SaveChanges时按键添加或更新实体。等效到数据库术语中的"upsert"操作。这种方法可以是
您可以这样使用方法:
context.TravelRequests.AddOrUpdate(
x => x.trTravelDestID, // Assuming the travelRequest are unique on this key
travelRequestToUpsert);
context.SaveChanges();
第一个形参告诉函数可以根据什么属性确定对象的唯一性。这里主键是最理想的。第二个(和第三个,…)是您想要替换的对象。