【发布时间】:2011-04-30 03:10:55
【问题描述】:
我正在将审核添加到我的 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);
}
}
我如何才能获得关系更改所涉及的详细信息(甚至是实际实体)?
更新
在又闲逛了几个小时后,我设法找到了我需要的信息(见附图)。但是,存储数据的类是内部密封类,我找不到公共条目来查询对象状态管理器以获取此信息。所以我可以审核更改。
【问题讨论】:
-
你有想过这个吗?
-
不,但我记得@Icrepas 的选项看起来很有希望,我只是没有时间去尝试。
标签: c# .net-4.0 entity-framework-4