我正在使用以下代码在MVC3应用程序中创建审计跟踪。
在代码示例中,他们使用GUID作为主键。在我的情况下,我使用自动增量的标识列。上面链接中的代码工作得很好,除了'add'我在调用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;
}
答案 0 :(得分:2)
您无法在数据库生成的PK中单独运行。这就是帖子使用GUID的原因。只有在执行SaveChanges
后插入=后,才能知道要插入的记录的PK。因此,您需要在此之后构建插入日志并再次SaveChanges
。