使用ObjectContext获取关系记录的主键

本文关键字:记录 关系 ObjectContext 获取 使用 | 更新日期: 2023-09-27 18:26:57

我尝试使用EF中的ChangeTracker进行审计,并将所有更改保存在数据库中(添加+更新)。

因此,使用ChangeTracker,我将能够获得所有更改的表,以及每个表的所有值。但我也需要新表中新记录的ID。

其中一些是关系,当我试图用EntityKey获取值时,主键是0

private object GetPrimaryKeyValue(DbEntityEntry entry)
{
    var objectStateEntry = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager.GetObjectStateEntry(entry.Entity);
    return objectStateEntry.EntityKey.EntityKeyValues[0].Value;    
}

有人知道,如果我走错了路,是否有可能获得相关实体的主键?

谢谢!

使用ObjectContext获取关系记录的主键

我认为您会得到0(这是默认值(int)),因为只有在保存完成后(即dbContext.SaveChanges已成功完成)才会填充自动递增的(标识)列。试着像这里建议的那样读取SaveChanges()之后的值。

这看起来像是一种捕捉新添加值的方法,您必须覆盖SaveChanges并像这里提到的那样自己获取生成的值。