繁体   English   中英

EF4审核多对多关系的变化

[英]EF4 Audit changes of many to many relationships

我正在将审核添加到我的EF4(模型优先)应用程序中。 我可以获得有关更改的实体的结构属性的详细信息。 我还可以看到多对多关系何时发生变化。 我可以看到所涉及的类型的名称和发生的事情(添加或删除),但我真正喜欢的是关系变化中涉及的实体的Id。

以下是我目前用于跟踪多对多关系变化的内容:

var changes = context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Deleted | EntityState.Modified);
var auditTime = DateTime.Now;

foreach (var change in changes)
{
    if (change.Entity != null && change.Entity.GetType().Equals(typeof(AuditTrail)))
    {
        continue;
    }

    var detailsBuilder = new StringBuilder();

    if (change.Entity == null & (change.State == EntityState.Added | change.State == EntityState.Deleted))
    {
        detailsBuilder.Append("A link between entities ");
        foreach (var changedMember in change.EntitySet.ElementType.KeyMembers)
        {
            detailsBuilder.AppendFormat("{0}", changedMember.Name);
            if(change.EntitySet.ElementType.KeyMembers.IndexOf(changedMember) < change.EntitySet.ElementType.KeyMembers.Count -2)
            {
                detailsBuilder.Append(", ");
            }
            else if (change.EntitySet.ElementType.KeyMembers.IndexOf(changedMember) == change.EntitySet.ElementType.KeyMembers.Count - 2)
            {
                detailsBuilder.Append(" and ");
            }
        }

        detailsBuilder.AppendFormat(" was {0}.<br />", change.State);
    }
}

如何获得关系变化中涉及的细节(甚至实际实体)?

UPDATE

经过几个小时的探索后,我找到了所需的信息(见附图)。 但是,存储数据的类是内部密封类,我找不到公共条目来查询对​​象状态管理器以获取此信息。 所以我可以审核这个变化。

替代文字

这可能会帮助你:

IEnumerable<IRelatedEnd> relatedEnds = ((IEntityWithRelationships) change.Entity).RelationshipManager.GetAllRelatedEnds();
foreach (var relatedEnd in relatedEnds)
{
     foreach (var subEntity in relatedEnd)
     {
          if (subEntity is IEntityWithRelationships)
          {
             var entityAssociated = (IEntityWithRelationships)subEntity;
             // Now you have your associated entity to work with...
          }
      }
 }

您可以通过RelationshipEntry的CurrentValues属性访问两个EntityKey对象(派生自ObjectStateEntry)。 应该给你你需要的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM