问题
我正在为我的 Web 应用程序实现 UnitOfWork 和存储库样式的数据访问层。我想使用我制作的自定义表来审核对数据库的更改。将新项目添加到上下文时会出现此问题。该项目已添加到上下文中,但SaveChanges()
尚未调用方法,因此实体仍处于Added
状态。这意味着尚未分配主键,这意味着我无法创建审计记录,并且SaveChanges()
从存储库调用将违反存储库编码风格。有没有办法在添加状态下获取实体的主键?
尝试的解决方案
我能想到的唯一解决方案是使用随机 GUID,以便客户端可以生成它们。我有点犹豫,因为我听说使用随机 GUID 作为身份字段可能会很昂贵。
代码
//Method in my repository class
public void Insert(T entity)
{
//Adds the entity the context
dbSet.Add(entity);
Audit audit= new Audit
{
Created = DateTime.Now,
PrimaryKey = entity.Key, //This is not set because the State of the entity is still Added
};
Context.Audits.Add(audit);
}