首页 > 解决方案 > DbEntityEntry.Member("JoinTable").CurrentValue 返回对象时如何访问属性值?

问题描述

我正在对 dbcontext.cs 进行审计日志设置,下一步是调用连接表的主键值,以便在审计日志表中记录父 ID。

现在我正在处理名为“TAXONOMY”的表的调用属性,该表是“CONSERVATIONSTATUS”的连接表,具有称为“CONSERVATIONSTATUSLINK”的多对多关系。

这是edmx中生成的表的结构:

public partial class CONSERVATIONSTATU
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public CONSERVATIONSTATU()
        {
            this.TAXONOMies = new HashSet<TAXONOMY>();
        }
    
        public int SPECIESCONSERVATIONID { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<TAXONOMY> TAXONOMies { get; set; }
    }

public partial class TAXONOMY
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public TAXONOMY()
        {
            this.CONSERVATIONSTATUS = new HashSet<CONSERVATIONSTATU>();
        }

        public int TAXONID { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<CONSERVATIONSTATU> CONSERVATIONSTATUS { get; set; }
    }
}

当它发布并通过 dbcontext.cs 保存更改时

// This is overridden to prevent someone from calling SaveChanges without specifying the user making the change
        public override int SaveChanges()
        {
            // Get all Added/Deleted/Modified entities (not Unmodified or Detached)
            foreach (var ent in this.ChangeTracker.Entries().Where(p => p.State == System.Data.Entity.EntityState.Added || p.State == System.Data.Entity.EntityState.Deleted || p.State == System.Data.Entity.EntityState.Modified))
            {
                // For each changed record, get the audit record entries and add them
                foreach (var x in GetAuditRecordsForChange(ent, userId))
                {
                    this.AUDITLOGs.Add(x);
                }
            }

            // Call the original SaveChanges(), which will save both the changes made and the audit records
            return base.SaveChanges();
        }


        private List<AUDITLOG> GetAuditRecordsForChange(DbEntityEntry dbEntry, string userId)
        {
            var testingvalue = dbEntry.Member("TAXONOMies").CurrentValue;   //Count = 1
            var testingvalue1 = dbEntry.Member("TAXONOMies").CurrentValue.ToString(); //"System.Collections.Generic.HashSet`1[oraFresh.TAXONOMY]"
            var testingvalue2 = dbEntry.Member("TAXONOMies").CurrentValue.GetType(); //{Name = "HashSet`1" FullName = "System.Collections.Generic.HashSet`1[[oraFresh.TAXONOMY, oraFresh, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}
        }

在 GetAuditRecordsForChange 中定义的变量 testingvalue 中,当我向其中添加手表但无法访问“TAXONID”时:

Name                      Value                      Type
testingvalue              Count = 1                  object{System.Collections.Generic.HashSet<db.TAXONOMY>}
   [0]                    {db.TAXONOMY}              db.TAXONOMY
      TAXONID             300000                     int
   Raw View
      Comparer            {System.Collections.Generic.ObjectEqualityComparer<db.TAXONOMY>}  System.Collections.Generic.IEqualityComparer<db.TAXONOMY>{System.Collections.Generic.ObjectEqualityComparer<db.TAXONOMY>}  
      Count               1                          int

有人可以提供建议,我是用错误的路径调用属性值还是可以访问它?谢谢。

标签: c#asp.net-mvcentity-framework

解决方案


推荐阅读