[英]How to emulate a SQL trigger in Entity Framework Core (code first)?
實體框架不支持觸發器。 有什么東西可以復制他們的行為嗎?
我對在我的代碼中插入 SQL 查詢不感興趣。
我有這個問題,因為我有一個案例,我想在我的數據庫中創建一個新表,只要在另一個現有表中插入內容,該表就會填充信息。
像這樣:
假設我有一個Prodcuts
表。 我想創建ProductsStatus
表。
如果將某些內容插入到Products
表中,我想向ProductStatus
表中添加一條記錄,存儲該ProductId
(外鍵)、一個DateTime
列和一個Stored
狀態。
關鍵是要避免重構我在代碼上添加產品的每個地方,以便執行此新操作。
我在某些情況下會做這樣的事情:
public partial class XContext : DbContext
{
private void TrackDates()
{
foreach (var entityEntry in ChangeTracker.Entries())
{
if (entityEntry.Entity is BaseEntity be)
{
switch (entityEntry.State)
{
case EntityState.Deleted: //soft delete instead
entityEntry.State = EntityState.Modified;
be.DeletedDate = DateTime.UtcNow;
break;
case EntityState.Modified:
be.ModifiedDate = DateTime.UtcNow;
be.CreatedDate = DateTime.UtcNow;
break;
case EntityState.Added:
be.CreatedDate = DateTime.UtcNow;
break;
}
}
}
}
public override int SaveChanges()
{
TrackDates();
return base.SaveChanges();
}
public override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = default)
{
TrackDates();
return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
}
}
每次調用 SaveChanges 時,它都會更新 UpdatedDate,或者標記一個 DeletedDate 以進行軟刪除等,這“有點像某些觸發器有時會做的事情”.. 也許您可以擴展它來滿足您的一些需求..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.