我有這個 ef 方法,我正在使用它并使用IdInclude選擇父表。我正在發送一個要創建到資料庫中的模型。它對于我發送一個新記錄的作業正常,但是當我發送一個已經有記錄的值時,我希望它更新資料而不是創建新記錄。我還需要更改其他內容才能使更新正常作業嗎?SingleMeetingPollingId0MeetingPollingQuestionId
public ResultStatus SaveMeetingPollingQuestion(Model.MeetingPollingQuestion mpq)
{
using (var db = new NccnEcommerceEntities())
{
using (DbContextTransaction dbTran = db.Database.BeginTransaction())
{
ResultStatus result = new ResultStatus();
try
{
var meetingPolling = db.MeetingPollings
.Include(x => x.MeetingPollingQuestions)
.Include(x => x.MeetingPollingQuestions.Select(q => q.MeetingPollingParts))
.Single(x => x.MeetingPollingId == mpq.MeetingPollingId);
var newMeetingPollingQuestion = new EFModel.MeetingPollingQuestion
{
MeetingPollingQuestionId = mpq.MeetingPollingQuestionId,
MeetingPollingId = mpq.MeetingPollingId,
MeetingPollingQuestionTypeId = mpq.MeetingPollingQuestionTypeId,
SequenceOrder = mpq.SequenceOrder,
MeetingPollingParts = mpq.MeetingPollingParts.Select(p => new EFModel.MeetingPollingPart
{
MeetingPollingPartsTypeId = p.MeetingPollingPartsTypeId,
MeetingPollingPartsValues = p.MeetingPollingPartsValues.Select(v => new EFModel.MeetingPollingPartsValue
{
QuestionValue = v.QuestionValue,
MeetingPollingPartsValuesTypeId = v.MeetingPollingPartsValuesTypeId
}).ToList()
}).ToList()
};
meetingPolling.MeetingPollingQuestions.Add(newMeetingPollingQuestion);
db.SaveChanges();
dbTran.Commit();
result.ResultCode = Convert.ToInt32(Enums.Result.Code.Success);
result.Message = "Successfully uploaded.";
}
catch (Exception e)
{
dbTran.Rollback();
result.Message = "Error Save Meeting Polling Question" e.Message;
result.ResultCode = Convert.ToInt32(Enums.Result.Code.Error);
}
return result;
}
}
}
uj5u.com熱心網友回復:
您要求的是物體框架不支持“開箱即用”的“Upsert” 。其他查詢語言(如 PostgreSQL 等)支持 Upsert。
您將不得不使用物體框架“滾動您自己的”Upsert 功能。由于您使用的是 . Add()在您的示例中,您只是插入資料,但從不更新它。為此,您需要檢查問題 ID 是否已存在。
你可以做類似的事情......
// determine whether the question id exists
var mpqIdExists = db.MeetingPollings.Where(mp => mp.MeetingPollingId == mpq.MeetingPollingId && mp.MeetingPollingQuestionId == mpq.MeetingPollingQuestionId).Any();
if (mpqIdExists)
{
// update
db.Entry(newMeetingPollingQuestion).State = EntityState.Modified;
}
else
{
// insert
meetingPolling.MeetingPollingQuestions.Add(newMeetingPollingQuestion);
}
db.SaveChanges();
dbTran.Commit();
禮貌: 使用 EF6 執行 UPSERT 的更有效方式
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/526048.html
標籤:C#实体框架
下一篇:僅從每個組中選擇第一行。物體框架
