c# - 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
有人可以提供建议,我是用错误的路径调用属性值还是可以访问它?谢谢。
解决方案
推荐阅读
- xamarin.forms - 如何修复没有日志的 Xamarin ios App 崩溃?
- python - Django makemigration 错误没有名为“qrcode.settings”的模块
- java - 使 @RequestHeader 隐藏为 true 且不是必需的
- flutter - Flutter Dio:将图像上传到服务器失败
- encoding - 如何使用 ffmpeg h265 压缩 h265 视频?
- javascript - 功能:接收多个输入,并将它们添加到列中
- oracle - 如何使用插入语句中的值在新插入之前进行计数
- assembly - 1 次 null/void/undefined 的汇编版本是什么?
- javascript - 分离轴定理:如何处理重叠的矩形卡住
- r - 如何将数据帧连续合并到r中的一个数据帧