본문 바로가기
Entity Framework Core

Entity Framework Core] transactions

by Fastlane 2023. 7. 14.
728x90
반응형

SaveChanges 함수를 호출할 때마다, transaction이 실행된다. 

transaction은 아래와 같은 특성이 있다. 

  • atomic : transaction 안에 모든 operations이 모두 commit 되거나, 되지 않는다. 
  • consistent : transaction 전후, database 상태는 일관된다. 예를들어 계좌이체를 할 때, 한 계좌에서 100달러를 인출했으면 한 계좌에 100달러를 입금되어 있어야 한다. 
  • isolated : transaction 동안, 수정은 다른 프로세스로부터 숨겨져있어야 한다. 여러 isolation level이 있다. 강력한 level일 수록, 데이터 무결성에 좋다. 하지만, lock이 많을수록, 다른 프로세스에 부정적인 영향을 준다. 
  • durable : transaction 도중 실패가 발생한 경우, 복구가 가능하다.  
반응형

explicit transaction 정의

database context의 Database property를 사용해서 transaction을 제어할 수 있다. 

using Microsoft.EntityFrameworkCore.Storage;

using (var transaction = db.Database.BeginTransaction())
{
    try
    {
    	var products = db.Products
        	.Where(p => p.ProductName.StartWith(name));
        
        db.Products.RemoveRange(products);
    	db.SaveChanges();
        
        transaction.Commit();
    }
    catch (Exception ex)
    {
        transaction.Rollback();
    }
}
728x90
반응형

댓글