gpt4 book ai didi

entity-framework - 在调用 SaveChanges() 之前添加的实体的访问 ID

转载 作者:行者123 更新时间:2023-12-04 07:26:32 25 4
gpt4 key购买 nike

我使用的是 EF 4.3.1,我已经覆盖了上下文中的 SaveChanges(),这样我就可以获得对象及其状态的列表,并在我的审计日志表中创建条目。我需要将记录的 ID 存储在审计日志表中,以便我对它有一个引用。这是插入记录时的一个问题,因为在保存之前我无权访问该 ID。有什么方法可以在那时获取 ID 吗?

public override int SaveChanges()
{
ChangeTracker.DetectChanges();

var objectStateManager = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager;
var modifiedAuditableEntities = objectStateManager.GetObjectStateEntries(EntityState.Modified | EntityState.Added).Where(e => (IAuditable)e.Entity != null);

foreach (var entry in modifiedAuditableEntities)
{
var entity = (IAuditable)entry.Entity;

if (entity != null)
{
switch (entry.State)
{
case EntityState.Added:
entity.IsAdded = true;
break;
case EntityState.Deleted:
entity.IsDeleted = true;
break;
case EntityState.Modified:
entity.IsModified = true;
break;
}

this.EntitySet<AuditLogEntry>().Add(this.auditLogService.CreateAuditLogEntryForEntity((IAuditable)entry.Entity));
}
return base.SaveChanges();
}

最佳答案

如果您的目标是同时创建您的保存和审计日志,您可以将其包装在一个事务范围内,这样您的方法就是原子的。

    public override int SaveChanges()
{
ChangeTracker.DetectChanges();
using (var scope = new TransactionScope())
{
var objectStateManager = ((IObjectContextAdapter) this).ObjectContext.ObjectStateManager;
var modifiedAuditableEntities =
objectStateManager.GetObjectStateEntries(EntityState.Modified | EntityState.Added).Where(
e => (IAuditable) e.Entity != null);
var result = base.SaveChanges();
foreach (var entry in modifiedAuditableEntities)
{
var entity = (IAuditable) entry.Entity;

if (entity != null)
{
switch (entry.State)
{
case EntityState.Added:
entity.IsAdded = true;
break;
case EntityState.Deleted:
entity.IsDeleted = true;
break;
case EntityState.Modified:
entity.IsModified = true;
break;
}

this.EntitySet<AuditLogEntry>().Add(
this.auditLogService.CreateAuditLogEntryForEntity((IAuditable) entry.Entity));
}
}
base.SaveChanges();

scope.Complete();
return result;
}
}

关于entity-framework - 在调用 SaveChanges() 之前添加的实体的访问 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12933960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com