我是asp.net的新手,我不知道这是否可行。如何在ASP.NET C#中创建UPSERT
函数在何处更新实体,如果它不存在,则会自动插入该行。
我有这个集合/实体
名称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);
}
答案 0 :(得分:3)
我认为AddOrUpdate
- 方法正是您所需要的。
调用SaveChanges时按键添加或更新实体。当量 从数据库术语到“upsert”操作。这种方法可以 在使用迁移播种数据时非常有用。
您可以使用以下方法:
context.TravelRequests.AddOrUpdate(
x => x.trTravelDestID, // Assuming the travelRequest are unique on this key
travelRequestToUpsert);
context.SaveChanges();
第一个参数告诉函数它可以确定对象如何唯一的属性。这里的主键很理想。第二个(和第三个,...)是你想要插入的对象。