[英]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.