【发布时间】:2013-05-28 13:52:56
【问题描述】:
我有两个表,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();
...
}
对于inserts、updates 和deletes 中的每个ObjectStateEntry,我可以通过Entity 属性获取正在修改的实体。
这对于像Product 和Category 这样的常规表非常有效,但它与ProductCategory 一起使用,因为Entity 属性为空。我在运行时通过ObjectStateEntry 的公共接口对插入/删除的ProductCategory 进行了挖掘,但找不到任何可以帮助我识别关键字段及其值的东西。我想得到:
- 相关表的名称(“Product”和“Category”)
- 相关记录的键值(
ProductID和CategoryID的值) - 从每个表到交集的相应关系的名称(“类别”和“产品”)。
我该怎么做?
【问题讨论】:
标签: c# entity-framework-5