在数据访问层中共享连接和事务

时间:2010-08-08 12:30:06

标签: asp.net ado.net data-access

我正在为我的asp.net应用程序构建数据访问层。 我希望能够在不同的类之间共享连接以管理事务,但我不知道该怎么做。

示例:

我有2个班,Order和OrderDetail。

我将调用我的DAL Order类来获取新订单的SQL插入。

在Insert方法中,我想调用我的OrderDetail类来插入我的订单的详细信息,我会用相同的连接和事务来做。

有人可以建议我做一些架构设计吗? 或者也许有人可以在互联网上提供一些资源?

我希望这个例子很明确,我的英语太糟糕了!

感谢。

1 个答案:

答案 0 :(得分:3)

我建议您专注于共享事务并保留现在的连接代码。汇集连接,因此打开连接应该对性能影响最小。您必须使用相同的事务,否则您的订单和订单详细信息的插入不是原子操作(如果您的代码中途失败,您最终会在数据库中输入不完整的订单)。

“分享”您的交易的最佳方式是使用TransactionScope类。它创造了一个所谓的ambient transaction。您在环境事务范围内打开的每个SqlConnection都会自动成为此事务的一部分。

如果您使用环境交易,则不再需要使用(或应该使用)SqlConnection.BeginTransaction