默认所有Sql的Linq生成的对象实现INotifyPropertyChanging
其中的DbContext将用于改变跟踪和在这种情况下,不会检测设置相同值。
只有在对象未实现INotifyPropertyChanging
的情况下,更改跟踪机制才会使用该对象的隐藏副本来检测对SubmitChanges()
的调用期间的更改。
看看Object States and Change-Tracking (LINQ to SQL)对于更改跟踪的解释。
---更新:其实,这是不完全正确的;这里是从LINQ到SQL类的摘录从的DbContext designer.cs文件:
[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Tasks")]
public partial class Task : INotifyPropertyChanging, INotifyPropertyChanged
{
private int _TaskId;
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_TaskId", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
public int TaskId
{
get
{
return this._TaskId;
}
set
{
if ((this._TaskId != value))
{
this.OnTaskIdChanging(value);
this.SendPropertyChanging();
this._TaskId = value;
this.SendPropertyChanged("TaskId");
this.OnTaskIdChanged();
}
}
}
}
是你的主键值整数,它的代码检查以前的值也是这样吗?
是否有您的DataContext在所有得到刷新任何机会呢? – thaBadDawg 2010-07-27 20:30:03
在代码之前的一行,我添加了一个dataContext.SubmitChanges(),它正常工作。 – 2010-07-27 20:32:33