如何举办房地产变更活动?

当我使用DataSet时,有可能在RowChanging,RowChanged,ColumnChanging,ColumnChanged等上引发事件……

如何对Entity Framework中的实体执行相同操作?

实体已经实现了PropertyChanged事件,因为它们实现了System.ComponentModel.INotifyPropertyChanged 。 如果您想捕获对您的entieis的更改,您可以只订阅它。

另请注意,实体支持以下两个部分方法 – 第二个方法应该为您提供相当于“RowChanging”的function – 如果您想要响应类中的更改可以覆盖它们:

 protected override void OnPropertyChanged(string property) {} protected override void OnPropertyChanging(string property) {} 

您可以执行以下操作来在Entity Framework中更改属性上的事件假设您有Pubs数据库 – 它有一个具有以下表结构的表employee

pubs数据库中的表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")); } } 

如果你运行它,它会显示

雇用日期已更改:17.09.2015

在控制台上,因为在main方法中我们通过以下方式更改了属性:

 test.hire_date = DateTime.Now; 

NB

  • 要删除事件注册,您可以使用:
    test.PropertyChanged -= HandleSomethingHappening;
  • 如图所示,Lambdas也被允许; 例如你可以使用:
    test2.PropertyChanged +=
    (c, a) => Console.WriteLine(((System.ComponentModel.PropertyChangedEventArgs)a).PropertyName + " property has changed in employee entity");
    它将处理与上述示例相同的事件。 但在这种情况下,由于无法引用隐式创建的匿名函数,因此无法取消注册
  • 您也可以使用PropertyChanging事件,该事件将更改发生之前触发
  • 这不仅限于entity framework,您可以在每篇课程中使用它,如本文所示。

高级提示:

如果您想更好地了解幕后发生的事情,我将提供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方法中被触发。