使用 Linq-2-Sql 更新:编辑私有字段不会触发更新,编辑 public 属性会。为什么?

Updating with Linq-2-Sql: Editing private fields doens't trigger update, editing public properties does. Why?

我正在使用 MVC 在 C# 中为用户配置文件创建一个编辑页面。对于这类页面,我从数据库中获取信息并将其显示在表单中,然后让用户将字段更改为 his/her 喜欢。

验证后,我显然想将数据提交回数据库,这是我无法弄清楚的地方。

如果我通过私有字段分配新值,则不会向数据库提交任何内容,如果我使用 属性 访问器,则不会提交值。

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;
        }
    }
}

老实说,我不知道为什么这会有所作为?

Linq2SQL 使用 INotifyPropertyChanged 和 属性 设置器中的事件来了解实例已更改。使用新值设置 属性 会触发事件,因此允许跟踪代码知道它。更改字段不会。