저는 BO (City)가있는 BO (국가)와 BO (국가)가 있습니다. 부모 BO (국가)를 업데이트하고 하위 상태를 추가하고 저장을 실행하면 DAL에서 예외가 발생하면 트랜잭션이 롤백되지 않습니다. 나는 SqlCE를 사용하고있다. 문제를 보여주는 샘플을 벗긴 샘플을 첨부하고 있습니다. 내가 도대체 뭘 잘못하고있는 겁니까?예외가 발생하면 TransactionScope가 롤백되지 않습니다. CSLA 4.3
테스트 코드 : 사용하는 경우
Country originalCountry = null;
try
{
originalCountry = Country.GetCountry(1);
var country = Country.GetCountry(1);
country.CountryName = "My new name";
var state = country.States.AddNew();
state.StateName = "Dummy state";
country.States.EndNew(country.States.IndexOf(state));
country.Save();
}
catch (Exception exception)
{
var country = Country.GetCountry(1);
if (originalCountry.CountryName != country.CountryName)
{
System.Console.WriteLine("Values ARE NOT the same: " + originalCountry.CountryName + " vs. " + country.CountryName);
}
else
{
System.Console.WriteLine("Values are the same: " + originalCountry.CountryName + " vs. " + country.CountryName);
}
}
Country.cs
[Transactional(TransactionalTypes.TransactionScope)]
protected override void DataPortal_Update()
{
Update();
}
private void Update()
{
using (var ctx = DalFactory.GetManager())
{
var dal = ctx.GetProvider<ICountryDal>();
using (BypassPropertyChecks)
{
var dto = new CountryDto();
TransferToDto(dto);
dal.Update(dto);
}
FieldManager.UpdateChildren(this);
throw new Exception("Rollback should occur.");
}
}
SQL CE 및 거래에 대한 이해에서
은 내가 CSLA 포럼에서 답을 얻고 당신은 바로 트랙에 있습니다. 내 비즈니스 규칙에서 DalManager를 적절하게 폐기하지 않아서 문제가 발생했습니다. – Mensur