簡體   English   中英

Entity Framework Core 獲取實體列名

[英]Entity Framework Core get entity column name

我在動態返回表列名時遇到了一些麻煩。 我在 DDD 標准中創建了一個 ASP net core 3.1 項目,我使用的是 Entity Framework Core v5.0.12。

我創建的實體如下:

public class TBSISTEMAXXX
{
   public Int64? SISTEMAXXX_NS { get; set; }

   public string SISTEMAXXX_NM { get; set; }
   public string SISTEMAXXX_DS { get; set; }
   public string SISTEMAXXX_VIEW { get; set; }
   public string SISTEMAXXX_CONTROLLER { get; set; }
   public DateTime SISTEMAXXX_DT_CAD { get; set; }
   public DateTime? SISTEMAXXX_DT_INA { get; set; }
}

我有一個RepositoryBase class,它包含所有“通用”功能,例如插入,我 go 通過實體查找名稱為“_DT_CAD”的“列”,這將是記錄的注冊日期插入時間。

public async Task<T> InsertAsync(T Objeto)
{
   try
   {
      using (var data = new Context(_OptionsBuilder))
      {
         await data.Set<T>().AddAsync(Objeto);

         foreach (var entry in data.ChangeTracker.Entries().Where(entry => entry.Entity.GetType().GetProperty(entry.Entity.GetType().Name + "_DT_CAD") != null))
         {
            if (entry.State == EntityState.Added)
            {
               entry.Property(entry.Entity.GetType().Name + "_DT_CAD").CurrentValue = DateTime.Now;
            }
         }

         await data.SaveChangesAsync();

         data.Entry(Objeto).GetDatabaseValues();
      }
   }
   catch (Exception)
   {
      throw;
   }

   return Objeto;
}

在此之前 function 在舊版本的 Entity Framework Core 中工作,但現在它不再工作。

我已經研究了一些方法來解決這個問題,但如果有人的話,我仍然沒有成功。

為了暫時解決這個問題,我將代碼如下:

public class TBSISTEMAXXX
{
   public Int64? SISTEMAXXX_NS { get; set; }

   public string SISTEMAXXX_NM { get; set; }
   public string SISTEMAXXX_DS { get; set; }
   public string SISTEMAXXX_VIEW { get; set; }
   public string SISTEMAXXX_CONTROLLER { get; set; }
   public DateTime SISTEMAXXX_DT_CAD { get; set; }  = DateTime.Now;
   public DateTime? SISTEMAXXX_DT_INA { get; set; }
}

但是,我在對注冊表進行更改時遇到了困難,因為它總是最終填充了修改日期並丟失了插入注冊表的日期。

如果有人可以幫助我,因為我想讓項目保持最新的“最新”版本並能夠動態獲取表列的名稱,因為我需要在其他函數中執行此操作。

在 class 的上下文中是這樣的:

 public override int SaveChanges()
        {

            foreach (var entry in ChangeTracker.Entries().Where(entry => entry.Entity.GetType().GetProperty(entry.Entity.ToString().Substring(entry.Entity.ToString().Length - 12) + "_DT_CAD") != null))
            {
                if (entry.State == EntityState.Added)
                {
                    entry.Property(entry.Entity.ToString().Substring(entry.Entity.ToString().Length - 12) + "_DT_CAD").CurrentValue = DateTime.Now;
                }

                if (entry.State == EntityState.Modified)
                {
                    entry.Property(entry.Entity.ToString().Substring(entry.Entity.ToString().Length - 12) + "_DT_CAD").IsModified = false;
                }
            }
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM