Обновление с помощью Linq-2-Sql: редактирование частных полей не вызывает обновление, а редактирование общедоступных свойств. Почему?

Я создаю страницу редактирования для профиля пользователя на С# с помощью MVC. Как и в случае с такими страницами, я получаю информацию из своей базы данных и отображаю ее в форме, а пользователь может изменять поля по своему вкусу.

После проверки я, очевидно, хочу отправить данные обратно в базу данных, и именно здесь произошло что-то, чего я просто не мог понять.

Если я назначаю новые значения через частные поля, ничего не отправляется в базу данных, если я использую средства доступа к свойствам, значения отправляются.

public partial class User {
    public static bool Edit(User update) {
        try {
            using (var db = new DataClassesBabysitterDataContext()) {
                User old = db.Users.Single(u => u.Id == update.Id);

                // This works
                // -------------------------------------
                old.Description = update.Description;

                // This does not
                // -------------------------------------
                old._Description = update._Description

                db.SubmitChanges();
            }

            return true;
        }
        catch (Exception e) {
            DBLogger.LogException(e);
            return false;
        }
    }
}

Честно говоря, я понятия не имею, почему это может иметь значение?


person Bjorn De Rijcke    schedule 03.01.2016    source источник


Ответы (1)


Linq2SQL использует INotifyPropertyChanged и события в установщиках свойств, чтобы знать, что экземпляр изменился. Установка свойства с новым значением запускает событие и, таким образом, позволяет коду отслеживания знать об этом. Изменение полей - нет.

person Jon Hanna    schedule 03.01.2016
comment
Понимаю. Спасибо за разъяснения! - person Bjorn De Rijcke; 03.01.2016