所以我知道您可以通过在操作上使用属性来让 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/