将DbEntityEntry附加到上下文

时间:2016-12-07 08:55:10

标签: asp.net orm

我正在尝试将日志系统实现到授权框架上下文。 我希望在删除状态时获取已删除的元素主键。 这是我的代码:

if (item.State == EntityState.Added || item.State == EntityState.Deleted) {
    log = new dt_islemLog();
    log.eskiDeger = null;
    log.islem = (item.State == EntityState.Added) ? Enums.GetDBValue(Enums.islemDurum.EKLENDI) : Enums.GetDBValue(Enums.islemDurum.SILINDI);
    log.islemYapanKullanici_id = kullaniciID;
    log.nesneAd = item.Entity.GetType().Name;
    log.oturum_id = oturumID;
    log.zaman = DateTime.Now;
    base.SaveChanges();

    var ID = GetPrimaryKeyValue(item);
    log.nesneID = ID != null ? ID.ToString() : null;

    this.dt_islemLog.Add(log);
}

这是我获得主键的方法

object GetPrimaryKeyValue(DbEntityEntry entry) {
    try {
        if (entry.State == EntityState.Detached)
            ((IObjectContextAdapter)this).ObjectContext.Attach((System.Data.Entity.Core.Objects.DataClasses.IEntityWithKey)entry.Entity);

            var objectStateEntry = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager.GetObjectStateEntry(entry.Entity);
            return objectStateEntry.EntityKey.EntityKeyValues[0].Value;

    } 
    catch(Exception ex) {
        return null;
    }
}

但我无法将(entry.Entitiy)附加到上下文,因为强制转换操作无效。我怎样才能获得主键?

1 个答案:

答案 0 :(得分:0)

如果有人需要我找到了解决方案。我已经更新了主键方法来喜欢这个

      object GetPrimaryKeyValue(DbEntityEntry entry)
    {
        try
        {
            if (entry.State == EntityState.Detached)
                this.Set(entry.Entity.GetType()).Attach(entry.Entity);

            var objectStateEntry = ((IObjectContextAdapter)this).ObjectContext.ObjectStateManager.GetObjectStateEntry(entry.Entity);
            return objectStateEntry.EntityKey.EntityKeyValues[0].Value;

        }
        catch
        {

            return null;
        }

    }