通常我们在写DAO的时候,一般会根据功能去写类似的下面这样的东东:
// Post数据库操作的Dao
public class PostDao
{
// 保存Visitor提交的一个Post
public void savePost(PostDataBean myPostDataBean)
{
// 获得数据库连接,保存数据
}
// 根据主键删除一条Post
public int deletePost(string postPk)
{
// 获得数据库连接,删除数据
//.....
}
}
// trace Visitor 的Dao
public class VisitorTraceDAO
{
public void SaveVisitorTrace(VisitorTraceDataBean traceDataBean)
{
// 获取数据库连接,保存数据
}
public VisitorTraceDataBean[] getTraceDataBean(VisitorTraceDataBean condition)
{
// 获取数据库连接,查询数据,返回
}
}
现在的业务情景是:一个Visitor提交了个Post, 系统需要保存,但同时,我们也需要在后台把这个Visitor的来源统计信息保存至数据库。所以我们通常会有这样的代码:
public class XXXDomain
{
// 这个方法的操作需要事务
public void SaveVisitorVisitInfo(PostDataBean postDataBean, VisitorTraceDAO traceDataBean)
{
PostDao postDao = new PostDao();
postDao.savePost(postDataBean);
VisitorTraceDAO VTDao = new VisitorTraceDAO();
VTDao.SaveVisitorTrace(traceDataBean);
}
}
偶现在的问题是:如何保证postDao.savePost(postDataBean); 和 VTDao.SaveVisitorTrace(traceDataBean); 是在一个事务里面呢?
这种情况,大家一般都是怎么做的?有没有一种优雅的解决方案,在不使用任何框架的情况下。这个问题仅限于.NET范围内.