По умолчанию все сгенерированные объекты Linq to Sql реализуют INotifyPropertyChanging
, который DBContext будет использовать для отслеживания изменений и в этом случае он не обнаружит установку идентичного значения.
Только в тех случаях, когда объект не реализует INotifyPropertyChanging
, механизм отслеживания изменений будет использовать скрытую копию объекта для обнаружения изменений во время вызовов SubmitChanges()
.
Посмотрите Состояния объектов и отслеживание изменений (LINQ to SQL) для объяснения отслеживания изменений.
--- Обновление: это на самом деле не совсем правильно; Вот выдержка из класса Linq to 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();
}
}
}
}
Являются ли значения первичного ключа целыми числами и проверяет ли ваш код предыдущее значение следующим образом?