如何获取纯关系记录的相关表和键值?

时间:2013-05-28 13:52:56

标签: c# entity-framework-5

我有两个表ProductCategory,它们有一个纯粹的多对多交集表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(); ... } ObjectStateEntryinserts中的每个updates我可以通过deletes属性修改实体。

这适用于常规表格,例如EntityProduct,但它会弹出Category,因为ProductCategory属性为空。我在运行时通过插入/删除Entity的{​​{1}}的公共界面进行了挖掘,但找不到任何可以帮助我识别关键字段及其值的内容。我想得到:

  • 相关表格的名称(“产品”和“类别”)
  • 相关记录的关键值(ObjectStateEntryProductCategory
  • 的值
  • 从每个表到交叉点的相应关系的名称(“类别”和“产品”)。

我该怎么做?

1 个答案:

答案 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或此处

中提到的一些关键字

Get entity facets and other metadata on runtime