我有两个表Product
和Category
,它们有一个纯粹的多对多交集表ProductCategory
(即ProductCategory
只包含两个字段{{1 }和ProductID
)。 EF为我做了很好的建模,因此CategoryID
具有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
,但它会弹出Category
,因为ProductCategory
属性为空。我在运行时通过插入/删除Entity
的{{1}}的公共界面进行了挖掘,但找不到任何可以帮助我识别关键字段及其值的内容。我想得到:
ObjectStateEntry
和ProductCategory
)我该怎么做?
答案 0 :(得分:0)
如果我做得对 - 你应该尝试我们在这里所做的事情(在OP的帮助下) 我认为这非常接近......
How I can read EF DbContext metadata programmatically?
具体来说,我认为......
ManyToManyReferences = navigationProperties.Where(np =>
np.FromEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many &&
np.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many)
.Select(np => Extensions.CreateLambdaExpression<TEntity>(np.Name))
.ToList();
<小时/> 您可能还想检查这个(以及我在那里收集的其他帖子的链接)以获取有关元数据的更多信息。或者搜索
IObjectContextAdapter
或此处中提到的一些关键字