使用 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
和 属性 设置器中的事件来了解实例已更改。使用新值设置 属性 会触发事件,因此允许跟踪代码知道它。更改字段不会。
我正在使用 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
和 属性 设置器中的事件来了解实例已更改。使用新值设置 属性 会触发事件,因此允许跟踪代码知道它。更改字段不会。