行如果你願意依賴於編譯時工具,您可以使用ILWeaving完成此工作。
因此,如果您將Fody與PropertyChanged插件組合在一起,那麼開箱即可支持IsDirty功能。
然後Martins的例子可以被簡化爲這個
public class Sample : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public int Id { get; set; }
public string Name { get; set; }
public bool IsChanged { get; set; }
}
注意使用如果IsChanged
代替IsDirty
。
然後這將在編譯的程序集
public class Sample : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public virtual void OnPropertyChanged(string propertyName)
{
var propertyChanged = PropertyChanged;
if (propertyChanged != null)
{
propertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
int id;
public int Id
{
get { return id; }
set
{
if (id != value)
{
id = value;
IsChanged = true;
OnPropertyChanged("Id");
}
}
}
bool isChanged;
public bool IsChanged
{
get { return isChanged; }
set
{
if (isChanged != value)
{
isChanged = value;
OnPropertyChanged("IsChanged");
}
}
}
string name;
public string Name
{
get { return name; }
set
{
if (!string.Equals(name, value, StringComparison.Ordinal))
{
name = value;
IsChanged = true;
OnPropertyChanged("Name");
}
}
}
}
如何用您的數據庫工作存在嗎?如果你使用了一些ORM,比如實體框架,它會自己跟蹤這些變化,所以你不應該擔心。 – Zabavsky
我沒有使用實體框架。我正在使用System.Data.SqlClient類。 –