#linq-to-sql #changeset
#linq-to-sql #набор изменений
Вопрос:
Простое обновление LINQ не работает. Я делаю изменения, но GetChangeSet возвращает 0 обновлений.
public bool Update(CompanyEmployee Employee)
{
if (!isValid(Employee)) return false;
var dc = new ERICustomersDataContext();
var e = dc.CompanyEmployees.Single(c => c.Id == Employee.Id);
if (e == null)
{
_ErrorMessage = "Not found";
return false;
}
e.LastName = Employee.LastName;
e.FirstName = Employee.FirstName;
e.EmployeeNumber = Employee.EmployeeNumber;
e.BusinessUnitId = Employee.BusinessUnitId;
var ChangeSet = dc.GetChangeSet();
if (ChangeSet.Updates.Count == 0)
{
_ErrorMessage = "Changeset is empty"; // <<<< THIS IS WHAT HAPPENS...
return false;
}
try
{
dc.SubmitChanges();
return true;
}
catch (Exception ex)
{
_ErrorMessage = ex.Message;
return false;
}
}
Комментарии:
1. Два пункта: 1) вы уверены, что новые значения отличаются от старых значений? 2) «dc.CompanyEmployees. Одиночный (c => c.Id == Сотрудник. Id)» никогда не вернет null, так зачем проверять это? Он выдаст ошибку, если имеется больше или меньше одной записи. Я думаю, вы хотите SingleOrDefault ()?
Ответ №1:
Я только что столкнулся с той же проблемой. У меня была одна таблица, которая отказывалась показывать изменения или обновлять.
Я исправил это, удалив все таблицы в моем файле dbml, а затем повторно добавив их.
Ответ №2:
Два элемента:
-
вы уверены, что новые значения отличаются от старых значений?
-
Следующее никогда не вернет null, так зачем проверять это? Он выдаст ошибку, если имеется больше или меньше одной записи. Я думаю, вы хотите SingleOrDefault ()?
dc.Сотрудники компании.Одиночный (c => c.Id == Employee.Id )
Комментарии:
1. Робинсон — Да, значения отличаются. Ранее у меня было SingleOrDefault, и в ходе тестирования я изменил его на Single, но это не возымело никакого эффекта. Я не думаю, что проблема очевидна из кода. Я подозреваю, что это может иметь какое-то отношение к безопасности, но пока не смог доказать или опровергнуть это.