c# - 事务应该处于 WCF 服务级别还是数据库访问级别?

标签 c# database wcf transactions ado.net

所以我知道您可以通过在操作上使用属性来让 WCF 自动创建事务,如下所示:

[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]

在界面上是这样的:

[TransactionFlow(TransactionFlowOption.Mandatory)]

我也知道在从数据库中读取时可以使用 ADO.Net 创建事务,所以我的问题是哪个是最佳选择?在 WCF 级别还是数据库级别?还是要看具体场景?

最佳答案

ADO.NET ( local ) 事务直接绑定(bind)到数据库连接 ( SqlConnection ),这意味着您必须不断传递连接,它不允许跨数据库工作。这是您最快的选择。

WCF 方式允许您进行环境事务。除了您记下的属性外,您还需要 TransactionScope . TransactionScope 的优势之一是它不仅仅与数据库相关联。任何事务感知提供者都可以使用它。此外,它还可以处理跨越多个连接的事务。如果您需要使用多个数据源,MSDTC 就会发挥作用。 MSDTC 实现两阶段提交协议(protocol)。分布式事务比本地事务慢。

所以答案是 - 这真的取决于您的要求。但是,如果您只处理单个数据库上的 CRUD 操作,那么 ADO.NET 事务就足够了。

关于c# - 事务应该处于 WCF 服务级别还是数据库访问级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38460485/

相关文章:

c# - 使用 EntityFramework 时更新导航属性?

mysql - 存储 2014-2015 字符串的最佳数据类型是什么?

wcf - 从 WSDL 文件生成 C#.net 类

c# - 这是一个好的 REST URI 吗?

c# - 将硬编码数据传输到数组

c# - 如何将 [ScaffoldColumn(false)] 设置为动态数据的默认值?

php - 在 PHP 中插入数据库

SQL INNER JOIN 多个表未按预期工作

wcf - 通过https访问AppHarbor上的WCF服务

c# - 在 WCF 或 WebAPI 方法 (IIS) 中返回 "Task<int>"而不是 "int"的好处