當我使用DataSet時,有可能引發RowChanging,RowChanged,ColumnChanging,ColumnChanged等事件...如何舉辦物業變更活動?
如何對來自實體框架的實體做同樣的事情?因爲他們實施System.ComponentModel.INotifyPropertyChanged
當我使用DataSet時,有可能引發RowChanging,RowChanged,ColumnChanging,ColumnChanged等事件...如何舉辦物業變更活動?
如何對來自實體框架的實體做同樣的事情?因爲他們實施System.ComponentModel.INotifyPropertyChanged
實體已經落實PropertyChanged
事件。如果您想要更改您的內容,則可以訂閱該內容。
還要注意的是實體支持以下兩個部分的方法,其中第二個應該給你「RowChanging」相當於 - 即你可以重寫,如果你想對變化類迴應中:
protected override void OnPropertyChanged(string property) {}
protected override void OnPropertyChanging(string property) {}
謝謝,我似乎已經在某處看到了它。 但我不知道的是:如何「**訂閱**」? 我應該在哪裏做出改變才能做到這一點? 在「Entities.edmx/Entities.Designer.cs 我需要另一類 下面這個實例=> MyEntities DB =新MyEntities();???? ... 謝謝您的澄清。 – NIF 2011-04-13 09:30:16
您可以執行以下操作,以提高在實體框架改變了對財產的事件:假設你有酒館數據庫 - 它有一個表employee
具有以下表結構:
現在,我們要跟蹤的財產hire_date
的任何變化。你可以做到這一點通過以下方式(這個例子可以很容易地在LinqPad使用 - 你只需要定義一個EF數據源,那麼你就可以運行這個例子):
void Main()
{
var test=new employee();
test.PropertyChanged += HandleSomethingHappening;
test.hire_date = DateTime.Now;
}
public void HandleSomethingHappening(object sender, EventArgs e)
{
var propName=((System.ComponentModel.PropertyChangedEventArgs)e).PropertyName;
var empObj=(employee)sender;
if (propName=="hire_date")
{
Console.WriteLine(propName+" changed to: " + empObj.hire_date.Date.ToString("d"));
}
}
如果你運行它,它會顯示
錄用日期改爲:2015年9月17日
在控制檯上,因爲在main方法,我們通過更改屬性:
test.hire_date = DateTime.Now;
注:
test.PropertyChanged -= HandleSomethingHappening;
test2.PropertyChanged +=
(c, a) => Console.WriteLine(((System.ComponentModel.PropertyChangedEventArgs)a).PropertyName + " property has changed in employee entity");
PropertyChanging
事件以及匿名函數,這將觸發前的變化正在發生高級提示:
如果你想更好地瞭解正在發生的事情在幕後,我所提供的employee
類(只需要屬性和事件的簡化代碼運行上面的例子):
public class employee //: EntityObject
{
#region Primitive Properties
public global::System.DateTime hire_date
{
get
{
return _hire_date;
}
set
{
//Onhire_dateChanging(_hire_date);
_hire_date=value;
Onhire_dateChanged();
}
}
private DateTime _hire_date;
void Onhire_dateChanged()
{
var handler = this.PropertyChanged; // copy before access (to aviod race cond.)
if (handler != null)
{
var args=new PropertyChangedEventArgs() { PropertyName="hire_date" };
handler(this, (System.EventArgs)args);
}
}
public event EventHandler PropertyChanged;
#endregion
}
public class PropertyChangedEventArgs: System.EventArgs
{
public string PropertyName { get; set; }
}
你可以看到事件是如何連接起來 - 它就會在酒店的set
方法觸發。
實體類不是數據集,你試圖解決什麼問題? – gandjustas 2011-04-11 14:45:10
這是一個重複的http://stackoverflow.com/questions/3460714/entity-framework-how-to-raise-onchanging-for-any-property? – NateTheGreat 2011-04-11 14:45:49
我已經發布了對您的問題[這裏](http://stackoverflow.com/a/32626552/1016343)的答案,展示瞭如何訂閱該事件以及EF如何處理事件。 – Matt 2015-09-18 08:49:19