Обновление LINQ для SQL не обновляется

#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:

Два элемента:

  1. вы уверены, что новые значения отличаются от старых значений?

  2. Следующее никогда не вернет null, так зачем проверять это? Он выдаст ошибку, если имеется больше или меньше одной записи. Я думаю, вы хотите SingleOrDefault ()?

    dc.Сотрудники компании.Одиночный (c => c.Id == Employee.Id )

Комментарии:

1. Робинсон — Да, значения отличаются. Ранее у меня было SingleOrDefault, и в ходе тестирования я изменил его на Single, но это не возымело никакого эффекта. Я не думаю, что проблема очевидна из кода. Я подозреваю, что это может иметь какое-то отношение к безопасности, но пока не смог доказать или опровергнуть это.