웹 프래그먼트 프레임 워크를 사용하여 프론트 엔드 HTML5 응용 프로그램에 백엔드 서비스를 제공하고 있습니다. 개체 관계 매핑을 위해 Entity Framework를 사용합니다. 웹 API는 데이터 조작을 위해 HTTP를 통해 메소드 세트를 노출하며, 프론트 엔드는 데이터 조작 (검색, 삽입, 갱신 등)을 위해 WebAPI를 사용합니다.WebAPI에 저장된 변경 사항을 롤백하는 방법
public class PersonRepository : IPersonRepository
{
private PersonDetailsContext personContext;
public PersonRepository(PersonDetailsContext personContext)
{
this.personContext= personContext;
}
public sResponse DeleteAccImage(ACCTIMAGE medAccImg)
{
sResponse sRes = new sResponse();
sRes.IsSuccess = false;
try
{
MEDACCTIMAGE medAccImgDelete = personContext.ACCTIMAGE.Where(X => X.ACCOUNT == medAccImg.ACCOUNT && X.CODE == medAccImg.CODE).SingleOrDefault();
if (medAccImgDelete == null)
{
sRes.outMessage = "Image does not exist for Account = " + medAccImg.ACCOUNT;
return sRes;
}
personContext.ACCTIMAGE.Remove(medAccImgDelete);
personContext.SaveChanges();
sRes.IsSuccess = true;
}
catch (System.Data.EntityException ex)
{
sRes.outMessage = ex.Message;
throw;
}
catch (Exception ex)
{
sRes.outMessage = ex.Message;
throw;
}
return sRes;
}
}
그리고 이것은 위의 저장소 방법에 대한 프론트 엔드의 요청에 매핑되는 컨트롤러 : 다음은
[ActionName("PostDeleteAccImage")]
[APIAuthentication]
public sResponse PostDeleteAccImage(ACCTIMAGE accImg)
{
//here i'm getting database name dynamically to connect to a database specified from front end
IPersonRepository personRep = new personRepository(new PersonDetailsContext(PersonRepository.GetDBConnectionString(accImg.DataBaseName)));
sResponse sResult = personRep.DeleteAccImage(medAccImg);
return sResult;
}
을 나는 웹 API 저장소에서 데이터베이스 작업을 수행하는 방법을 아래
입니다 내 질문 :
SaveChanges()
를 호출 한 후 다른 웹 API 메서드 호출을 사용하여 한 웹 API 호출에서 수행 된 변경 사항을 롤백 할 수 있습니까?
이것이 가능한지 아닌지는 잘 모르겠다. 각 API 요청에 대해 컨텍스트가 같지 않을 것이라고 생각하기 때문에 (즉, API의 새 인스턴스가 생성되어 이전 컨텍스트, 내가 맞습니까?).
이전 API 호출의 변경 사항을 롤백 할 수있는 방법이 있습니까?
성공한 SaveChanges가 있다면 몇 가지 이유가 있습니다. 왜 롤백하고 싶습니까? 예외를 던져 다시 호출자에게 답장을 보내지 마십시오. 다시 던지지 마십시오 – dariogriffo
트랜잭션을 사용할 수 있다고 생각되면 http://msdn.microsoft.com/en-us/data/를 확인하십시오. dn456843.aspx. 롤백 할 특정 경우에 트랜잭션을 실패하게 만들 수 있습니다. – Hozikimaru
제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –