#asp.net #frameworks #entity
#asp.net #фреймворки #сущность
Вопрос:
Я использую Entity Framework 4, и когда я пытаюсь обновить существующую запись, она обновляет и вставляет новую запись с теми же значениями.
public void UpdateEmployeeEvaluationResponse(long empId, long evalId, long QuestID, string responseStr)
{
var currentResponse = this.LoadResponseByEvaluationIdAndQuestionIdAndEmployeeId(evalId,
QuestID, empId);
// response.ID = currentResponse.ID;
//currentResponse.ResponseDate = response.ResponseDate;
currentResponse.Response = responseStr;
// entities.ObjectStateManager.GetObjectStateEntry(response).SetModified();
// entities.EmployeeEvaluationResponses.Attach(response);
//// entities.ObjectStateManager.ChangeObjectState(currentResponse, System.Data.EntityState.Modified);
// //entities.EmployeeEvaluationResponses.ApplyCurrentValues(response);
ObjectStateEntry osmEntry = entities.ObjectStateManager.GetObjectStateEntry(currentResponse);
osmEntry.ChangeState(EntityState.Modified);
// //entities.ObjectStateManager.GetObjectStateEntry(currentResponse).SetModified();
// //entities.Refresh(RefreshMode.ClientWins, currentResponse);
// entities.Detach(currentResponse);
entities.SaveChanges();
}
это реализация метода load
public EmployeeEvaluationResponse LoadResponseByEvaluationIdAndQuestionIdAndEmployeeId(long evaluationId,
long questionResponseId,
long employeeId)
{
return entities.EmployeeEvaluationResponses.Include("Employee").Include("Evaluation").Include
("QuestionResponse").Where(x => x.Evaluation.ID == evaluationId amp;amp;
x.QuestionResponse.ID == questionResponseId amp;amp;
x.Employee.Id == employeeId).FirstOrDefault();
}
Привет, я решил это ==> проблема заключалась в том, что из других применений есть некоторые кэшированные объекты, поэтому
Я создал код для отсоединения всех объектов, и это работает … Да … и прокомментировал другое решение
public void UpdateEmployeeEvaluationResponse(long empId, long evalId, long QuestResponseID, string responseStr)
{
foreach (var item in entities.EmployeeEvaluationResponses)
{
entities.EmployeeEvaluationResponses.Detach(item);
}
var currentResponse = this.LoadResponseByEvaluationIdAndQuestionIdAndEmployeeId(evalId,
QuestResponseID, empId);
currentResponse.Response = responseStr;
entities.DetectChanges();
entities.SaveChanges();
//using (AttendanceEntities entity = new AttendanceEntities())
//{
// EmployeeEvaluationResponse responseObj =
// entity.EmployeeEvaluationResponses.Where(x => x.Evaluation.ID == evalId amp;amp;
// x.QuestionResponse.ID == QuestResponseID amp;amp; x.Employee.Id == empId).FirstOrDefault();
// responseObj.Response = responseStr;
// entity.DetectChanges();
// entity.SaveChanges();
//}
}
Комментарии:
1. Можете ли вы показать реализацию метода loadresponsebyevaluationid, QuestionID и EmployeeID, поскольку я думаю, что он содержит проблему
2. В таблице EmployeeEvaluationResponses есть 3 внешних ключа для других 3 таблиц Employee amp; Evaluation amp; Questionresponse . Пожалуйста, убедитесь, что связь между этими 4 таблицами отображена правильно.
3. да, это отображено правильно