【问题标题】:How to get the related tables and key values of a pure relationship record?如何获取纯关系记录的相关表和键值?
【发布时间】:2013-05-28 13:52:56
【问题描述】:

我有两个表,ProductCategory,它们有一个纯多对多交集表,ProductCategory(即ProductCategory 仅包含两个字段,ProductIDCategoryID)。 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();
    ...
}

对于insertsupdatesdeletes 中的每个ObjectStateEntry,我可以通过Entity 属性获取正在修改的实体。

这对于像ProductCategory 这样的常规表非常有效,但它与ProductCategory 一起使用,因为Entity 属性为空。我在运行时通过ObjectStateEntry 的公共接口对插入/删除的ProductCategory 进行了挖掘,但找不到任何可以帮助我识别关键字段及其值的东西。我想得到:

  • 相关表的名称(“Product”和“Category”)
  • 相关记录的键值(ProductIDCategoryID的值)
  • 从每个表到交集的相应关系的名称(“类别”和“产品”)。

我该怎么做?

【问题讨论】:

    标签: c# entity-framework-5


    【解决方案1】:

    如果我做对了 - 你应该试试我们在这里所做的(在 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-18
      • 2018-03-31
      • 2016-03-21
      • 2012-08-23
      • 2018-03-18
      • 1970-01-01
      相关资源
      最近更新 更多