我有两个表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,我都可以通过属性 获取正在修改的实体。updatesdeletesEntity
这对于像Productand这样的常规表非常有效,但它会因为属性为空Category而被 轰炸掉。我在运行时通过insert/deleted的公共接口进行了挖掘,但找不到任何可以帮助我识别关键字段及其值的东西。我想得到:ProductCategoryEntityObjectStateEntryProductCategory
- 相关表的名称(“产品”和“类别”)
- 相关记录的键值(
ProductID和的值CategoryID) - 从每个表到交集的相应关系的名称(“类别”和“产品”)。
我该怎么做?