我有两个实体:User和UserRole。它被实现为DB中的表和具有相同名称的类。如果我创建新用户,我必须为他创建userrole。如果在用户创建或用户角色创建期间出现异常,则无法创建用户。问题是我不知道如何设置try catch块。我有一些选择:
1)
try
{
UserDA.BeginTransaction();
try
{
UserDA.Save(newUser);
UserDA.CommitTransaction();
}
catch()
{
throw SomeException;
UserDA.RollbackTransaction();
}
UserRoleDA.BeginTransaction();
try
{
UserRoleDA.Save(newUser);
UserRoleDA.CommitTransaction();
}
catch()
{
throw SomeException;
UserRoleDA.RollbackTransaction();
}
}
catch()
{
//catch user creation exception
}
2)
UserDA.BeginTransaction();
try
{
UserDA.Save(newUser);
UserDA.CommitTransaction();
UserRoleDA.BeginTransaction();
try
{
UserRoleDA.Save(newUser);
UserRoleDA.CommitTransaction();
}
catch()
{
throw SomeException;
UserRoleDA.RollbackTransaction();
}
}
catch()
{
//catch
UserDA.RollbackTransaction();
}
可能有人知道更正确的方式。
答案 0 :(得分:2)
这样做的一般方法是:
Try{
StartTransaction
...do work...
CommitTransaction
}
catch(Exception)
{
RollbackTransaction
}
这样,在工作时抛出的任何东西都会导致整个事务回滚。只有当你到达...的末尾才能正常工作......没有抛出异常会调用commit。