2016-04-23 115 views
1

這是我的代碼:如何使用ExecuteSqlCommand刪除實體框架中的記錄?

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transactionOption)) 
{ 
    foreach (ManufacturecodeEntity mcodeEntity in ManufacturecodeEntities) 
    { 
     ManufacturecodeEntity pcodeEntity = mcodeEntity.Parent; 
     pcodeEntity.IsCurrent = true; 

     UnitOfWork.ManufacturecodeRepository.Update(pcodeEntity); 
    } 

    UnitOfWork.DbContext.Database.ExecuteSqlCommand("Delete from manufacturecodes where detailstate_id=" + Id.ToString()); 
    UnitOfWork.SaveChanges(); 

    scope.Complete(); 
} 

但是當我跑到方法ExecuteSqlCommand,我的應用程序將停止,然後引發超時異常。

我使用ExecuteSqlCommand來刪除記錄,因爲記錄超過1500,如果我使用實體框架DeleteSaveChanges方法,它會花費60s,我無法接受結果。

所以我嘗試ExecuteSqlCommand方法來提高性能。現在看來有什麼問題了。

請幫助我,謝謝。

回答

1

你應該在ExecuteSqlCommand使用SqlParameters爲:

UnitOfWork.DbContext.Database.ExecuteSqlCommand("Delete from manufacturecodes where [email protected]", new SqlParameter("@id", id); 
+0

相同的結果,超時異常 – user2155362

0

我想我知道正確的方法。我應該使用DbContext.Database.BeginTransaction而不是TransactionScope