[英]Helper function to remove/delete all entity data, EF
在種子數據文件中,我首先刪除特定實體中的所有條目,然后添加新條目。 但是我覺得刪除數據的代碼可以改進(或清除)。
目前,我的工作方式是:
var oldCertCat = context.CertCategoryValues.ToList();
oldCertCat.ForEach(cat => context.CertCategoryValues.Remove(cat));
下一個實體:
var oldCertLevel = context.CertLevelValues.ToList();
oldCertLevel.ForEach(certLevel => context.CertLevelValues.Remove(certLevel));
我正在考慮創建一個像這樣的輔助函數:
void DeleteData("EntityName")
{
var oldData = context."EntityName".ToList();
oldData.ForEach(item => context."EntityName".Remove(item));
}
這樣會更清潔。 有什么建議么?
使用EF刪除大量數據效率很低。 它首先從數據庫中加載所有實體,然后一個一個地刪除它們。
改用原始SQL:
void Deletedata(string tableName)
{
context.Database.ExecuteSqlCommand("DELETE FROM {0}", tableName);
}
它將僅對數據庫進行一次調用,並讓DB一步完成整個刪除操作,這將大大提高效率。 如果所涉及的表很大,則可能值得使用TRUNCATE TABLE
來獲得一些性能。
你可以用一個通用的
void DeleteData<T>() where T : class
{
var oldData = context.Set<T>().ToList();
oldData.ForEach(item => context.Set<T>().Remove(item));
context.SaveChanges();
}
然后可以這樣稱呼它:
DeleteData<User>()
如果要刪除所有用戶,則。
我建議在這里使用sql。 由於EF會加載這些實體中的每個實體然后將其刪除,因此您的處理方式會占用大量數據。 非常貴。
只需編寫sql“從CertLevelValues刪除”或刪節表即可。
特別是對於大型數據集,速度明顯更快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.