gpt4 book ai didi

c# - EF4审计多对多关系的变化

转载 作者:太空狗 更新时间:2023-10-29 23:48:21 24 4
gpt4 key购买 nike

我正在将审计添加到我的 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);
}
}

我如何才能获得关系变更中涉及的详细信息(甚至实际实体)?

更新

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

alt text

最佳答案

这可能对您有所帮助:

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...
}
}
}

关于c# - EF4审计多对多关系的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4683065/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com