我正在使用以下代码在 MVC3 应用程序中创建审计跟踪。
在代码示例中,他们使用 GUID 作为主键。就我而言,我使用的是自动递增的标识列。上面链接中的代码效果很好,除了在“添加”上调用 dbentry.current 值时我无法获取主键(返回 0,因为 for 不提交此数据)。
我正在尝试找到一种获取主键的方法,以便可以正确地将其添加到我的事务表中。我知道您以后可以检索它,但我不确定获得它然后使用正确的主键更新表的最佳方法。
任何想法,将不胜感激。我不想将我的主键更改为 GUID。
我对有效的 dbcontext 进行了以下修改。
if (ent.State == System.Data.EntityState.Added)
{
base.SaveChanges();
ent.State = System.Data.EntityState.Added;
}
然后在 GetAuditRecordsForChange 函数中,我再次分离,因此不会创建两次记录。
if (dbEntry.State == System.Data.EntityState.Added)
{
// For Inserts, just add the whole record
// If the entity implements IDescribableEntity, use the description from Describe(), otherwise use ToString()
result.Add(new TransactionHistory()
{
TransactionTypeID = 1,
TableName = tableName,
FieldName = "ALL",
RecordPK = dbEntry.CurrentValues.GetValue<object>(keyName).ToString(),
OldValue = null,
NewValue = (dbEntry.CurrentValues.ToObject() is IDescribableEntity) ? (dbEntry.CurrentValues.ToObject() as IDescribableEntity).Describe() : dbEntry.CurrentValues.ToObject().ToString(),
TransactionBy = userId,
TransactionDate = changeTime,
TransactionApplication = "Galactus"
});
dbEntry.State = System.Data.EntityState.Detached;
}