MVC 3 위에서 EF 4.1 을 사용하고 있습니다.
기본적으로 Azure 에서는 DTC 가 지원되지 않는 것으로 알고 있고,
Transaction 을 DTC 로 승격시키지 않기 위해서는 EF 4.1 에서는
수동으로 열고 닫는 처리를 해줘야 하는 것으로 알고 있습니다.
참고 URL : http://msdn.microsoft.com/ko-kr/library/bb896325.aspx
음.. 질문 내용은...
SQL 2008 에서 테이블을 만들어 놓고,
비주얼스튜디오 2010 에서 "ADO.NET 엔티디 데이터 모델" 추가를 하고,
프로젝트 내에서 컨트롤 추가로 CRUD 를 매핑 후....
Controllers 내에서...
[HttpPost]
public ActionResult Create(tbl_GuestBookTest tbl_guestbooktest)
{
if (ModelState.IsValid)
{
using (TransactionScope scope = new TransactionScope())
{
try
{
tbl_guestbooktest.GUID = Guid.NewGuid().ToString();
db.tbl_GuestBookTest.AddObject(tbl_guestbooktest);
db.SaveChanges();
/// scope.Complete();
}
catch
{
// do nothing
}
}
return RedirectToAction("Index");
}
return View(tbl_guestbooktest);
}
이런 방식으로 트랜잭션 테스트를 수행해보니, Commit 과 Rollback 은 잘됩니다.
그런데, DTC 로 승격을 방지하려면,
엔티티 모델 추가된것과는 별도로 수동으로 Open / Close 에 대한 처리를 해줘야 하는 것인지요?
( 참고 URL :
http://social.msdn.microsoft.com/Forums/is/adodotnetentityframework/thread/c3fd7555-7fff-44b8-8e1e-030073c20597 )
추가된 엔티티모델의 partial class 내에서 public myObjectEntities() : base("name=myObjectEntities", "myObjectEntities") 와 같이
Connection 이 자동으로 연결이 됩니다만, 이 경우 DTC 로 자동 승격이 되버리는 지요?
만약에 그렇다면 DTC 자동 승격을 방지하기 위해서,
Base 에서 Connection 을 제거하고,
using (var context = new MyContext())
{
using (var txscope = new TransactionScope())
{
context.Connection.Open();
// do query 1
// do query 2
}
}
이런 방식으로 메소드 내에서 컨텍스트 별로 Open 에 대한 처리를 따로 해줘야 하는 것인지요?
------------------------------------------------------
검색을 계속 하면서 테스트를 수행해보고 있습니다만...
엔티티모델 추가부터 트랜잭션 처리 , DTC 승격 방지 처리까지 정리된 내용을 찾기가 쉽지 않네요...
감사합니다.