【问题标题】:Foreign key id and description on SaveChanges() overide - Entity FrameworkSaveChanges() 覆盖的外键 ID 和描述 - 实体框架
【发布时间】:2013-12-03 17:48:55
【问题描述】:

我需要为每个实体添加通用审计日志,因此我覆盖了 DbContext 类中的 SaveChanges() 方法并能够创建日志。

我的问题是外键,我需要获取外键的文本值而不是实体的 id。

提前致谢

RJ

这里是代码

if (dbEntry.State == System.Data.EntityState.Modified)
{
if (!object.Equals(dbEntry.GetDatabaseValues().GetValue<object>(propertyName), dbEntry.CurrentValues.GetValue<object>(propertyName)))
{
var oldvalue = dbEntry.GetDatabaseValues().GetValue<object>(propertyName) != null ? dbEntry.GetDatabaseValues().GetValue<object>(propertyName).ToString() : "";
var newvalue = dbEntry.CurrentValues.GetValue<object>(propertyName) != null ? dbEntry.CurrentValues.GetValue<object>(propertyName).ToString() : "";
Auidlog += displayName + ": Changed from - " + oldvalue + " To - " + newvalue + " ";
}
}

在 oldvalue/newvalue 变量中只返回外键 id,我需要它的描述

【问题讨论】:

  • 到目前为止的代码?多一点信息会有所帮助。不清楚你想做什么,不明白怎么做。
  • 好的,所以您了解如何使用 dbEntry.CurrentValues 和 dbEntityEntry.OriginalValues。注意 GetDbValues 回到 Db.Different to originalValue 检查。无论如何,这样你就知道发生了什么变化。那么这与外键有什么关系呢?您要查询 EF 模型吗?
  • 哪个描述。你有propertyName。那么你指的是哪个文本?
  • 感谢 phil 的回复,我想要的是,假设在我的实体(班级)中,我与班级中的另一个实体(学生)(如 studentId PK,studentName)有外键关系表我将只存储 studentid,GetDatabaseValues/OriginalValues 只会给我 id,但我想要来自其他实体的“StudentName”来创建审核日志。

标签: .net entity-framework


【解决方案1】:

您可以使用以下方式访问模型的元数据:

   ObjectContext objContext = ((IObjectContextAdapter)context).ObjectContext;
   MetadataWorkspace workspace = objContext.MetadataWorkspace;
   IEnumerable<EntityType> managedTypes = workspace.GetItems<EntityType>(DataSpace.OSpace);

DataSpace.xxxx 有其他枚举公开元数据的不同视图。因此,请检查所有内容。

但是您打算如何访问主表的“文本”字段。 找到一个字符串?查找包含术语名称或文本的属性? 也许您可以在每个主表上实现一个接口。或者在表格的主文本字段中添加一个属性。

这似乎更像是一项艰巨的挑战。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多