我有5个使用实体框架加载的实体。他们来了:
所有实体都继承自:
(每个实体由具有上述属性的类表示.Al实体继承传输实体)
如您所见,某些实体中存在共同属性。但是属性WorkerId,WorkerPersonalId,VehicleId,VehicleNumber,SubcontractorId都有SET的特殊方法,所以为了封装更新的逻辑我创建了WorkerVehicleTransmission类与那些属性setter实现。现在每个传输都使用WorkerVehicleTransmission
现在我有了新的需求。我需要记录每个属性更改。为此,我有Log()方法。对于eaxmple,我需要当用户进行cargoStorage.Weight=8;
时,将调用Log()来记录此更改。
重要问题:我需要找到一个解决方案,其中实体的创建(例如实体框架)不会记录。
如何整合新需求?
这个问题是我在这里问的例子的真正需要:how to solve this code duplication + add another method
答案 0 :(得分:0)
首先,您可以将一个处理程序附加到Transmission基类中的PropertyChanged事件,这使您可以在任何子类中的属性发生更改时调用Log方法。
INotifyPropertyChanged.PropertyChanged Event
然而,当进行任何更改时,包括实体框架创建对象的时间,这将触发,因此只有一半。
修改强>
如果在Transmission类(布尔标志)中创建新属性,则可以在数据访问对象例程中使用它来设置是否应启用日志记录。
此标志仅在每个对象上的任何Entity Framework活动完成后设置,因此记录的唯一属性更改是与您的代码相关的属性。
不是一个优雅的解决方案,但我看不到任何其他方式。
修改强>
刚看了一下EntityObject基本成员,还有一个名为EntityState的属性(枚举)。
EntityObject.EntityState Property
当实体框架创建实体(未附加到对象上下文)并将其值更改为“已添加”,“已删除”,“已修改”或“未更改”后,此属性将设置为“已分离”被添加(取决于对象的状态)。
通过检查该值是否为“已分离”以外的任何值,您可以确定是否应启用日志记录。