저는 AutoFac을 사용하여 웹 응용 프로그램에 구체적인 데이터 컨텍스트를 삽입하고 있습니다. 페이지에 예외가없는 경우 요청 끝에 데이터베이스 컨텍스트의 SaveChanges()
메서드를 실행하려고합니다. 그렇지 않으면 난 그냥 정상적으로 컨텍스트를 처분하고 싶다.AutoFac OnRelease를 사용하여 DbContext 변경 내용을 저장 하시겠습니까?
AutoFac에 OnRelease
메서드가 있음을 발견했습니다. 해당 메서드에 대한 Intellisense는 다음을 나타냅니다.
더 이상 필요없는 인스턴스를 처리하는 대신 제공된 작업을 실행하십시오.
builder.RegisterType<MyContext>().As<IDbContext>().InstancePerHttpRequest() .OnRelease(x => { if (HttpContext.Current != null && HttpContext.Current.Error == null) x.SaveChanges(); if (x != null) { x.Dispose(); x = null; } });
이 데이터 컨텍스트에 대한 변경 사항을 적용 할 수있는 적절한 장소 : 이와 같이
,이 같은 일을 생각하고 있었는데? 예외가 발생하더라도 모든 요청에 대해 실행되도록 보장됩니까?
Alexandr, 답변 해 주셔서 감사합니다. 필요한 경우 내 코드 내에서 SaveChanges()를 호출 할 수있는 유연성이 있습니다. 또한 처분에 대한 걱정을 처리하기 위해 나머지 코드에서와 마찬가지로 try/catch/finally 블록에'SaveChanges()'를 래핑 할 수 없습니까? – Sam
@Sam "필요한 경우 내 코드 내에서 SaveChanges()를 호출 할 수있는 유연성이 있습니다." 왜이 두 가지 방법을 결합하고 싶습니까? 버그로 연결됩니다. "try/catch/finally 블록에서 SaveChanges()를 래핑 할 수 없습니다."예, 작동하지만 ... :) –