默認所有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