我有两个表Product
和Category
,它们有一个纯粹的多对多交集表,ProductCategory
(即ProductCategory
只包含两个字段,ProductID
和CategoryID
)。EF 为我很好地建模了这个模型,它Product
有一个Categories
属性并且Category
有一个Products
属性。
现在我想创建一个审计跟踪,在插入、更新或删除记录时捕获。我通过创建部分类的另一半MyEntities
并覆盖SaveChanges()
. 因此:
public override int SaveChanges(SaveOptions options)
{
var inserts = ObjectStateManager.GetObjectStateEntries(EntityState.Added).ToList();
var updates = ObjectStateManager.GetObjectStateEntries(EntityState.Modified).ToList();
var deletes = ObjectStateManager.GetObjectStateEntries(EntityState.Deleted).ToList();
...
}
并且对于每个中的ObjectStateEntry
每个inserts
,我都可以通过属性 获取正在修改的实体。updates
deletes
Entity
这对于像Product
and这样的常规表非常有效,但它会因为属性为空Category
而被 轰炸掉。我在运行时通过insert/deleted的公共接口进行了挖掘,但找不到任何可以帮助我识别关键字段及其值的东西。我想得到:ProductCategory
Entity
ObjectStateEntry
ProductCategory
- 相关表的名称(“产品”和“类别”)
- 相关记录的键值(
ProductID
和的值CategoryID
) - 从每个表到交集的相应关系的名称(“类别”和“产品”)。
我该怎么做?