即時通訊新的在asp.net中,我不知道這是否可能。我如何在ASP.NET C#中創建一個UPSERT
函數在哪裏更新一個實體,如果它不存在,它會自動插入該行。創建Upsert函數ASP.NET
我有這個集合/實體
名travelRequest
namespace TRS.Entities
{
[Table("travelRequest")]
public class travelRequest
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int travelRequestID { get; set; }
//...
public virtual IList<trTravelDest> trTravelDest { get; set; }
//...
}
含
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
我的問題是,當我在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);
}
最簡單的事情就是檢查實體的ID字段。我會假設你有這個,並且你可以檢索你的實體。如果您的ID爲0,那麼它不存在於數據庫中,然後將其插入到數據庫中。 – hbulens
哪個版本的實體框架?從EF6 +你有方便.AddOrUpdate()方法 –
我想知道。我假設traveldest是旅行請求中的許多地方之一。難道不同的旅行要求可以有相同的旅行嗎?如果是這樣,那麼你就不要在旅行中使用外鍵 –