当前位置: 首页 > news >正文

个人网站模板吧电子商务网站建设心得

个人网站模板吧,电子商务网站建设心得,深圳微网站开发,注册公司名字查询网作者#xff1a;依乐祝原文链接#xff1a;https://www.cnblogs.com/yilezhu/p/10170712.html今天在写CzarCms的UnitOfWork的使用使用到了这个TransactionScope事务#xff0c;因此对它进行了相关资料的查阅并记录如下#xff0c;希望对大伙在.NET Core中使用有所帮助。写在… 作者依乐祝原文链接https://www.cnblogs.com/yilezhu/p/10170712.html今天在写CzarCms的UnitOfWork的使用使用到了这个TransactionScope事务因此对它进行了相关资料的查阅并记录如下希望对大伙在.NET Core中使用有所帮助。写在前面您是否曾尝试使用C代码来实现事务通常我们在SQL中一次执行多个Insert / Update语句的话可能就会使用到事务。事务遵循ACID原子性一致性隔离性持久性规则这样所有的语句要么全部执行成功要么全部被取消并执行回滚操作。 而我们今天要讲的TransactionScope则可以允许我们在应用程序级别实现这个过程。在某些情况下您可能需要在同一个数据库甚至多个数据库分布式事务中执行不同的操作或者由于某些其他约束它无法在数据库级别来完成或者应用程序的开发人员对数据库的接触较少那么这时候TransactionScope将会让你游刃有余。什么是TransactionScope呢TransactionScope作为System.Transactions的一部分被引入到.NET 2.0。同时SqlClient for .NET Core 从 2.1 及以上版本开始提供对System.Transactions的支持 。 它是一个类它提供了一种简单的方法可以将一组操作作为事务的一部分来进行处理而不必担心场景背后的复杂性。如果某个操作在执行的过程中失败的话则整个事务将失败并执行回滚操作从而撤消已完成的所有操作。所有这些都将由框架处理从而确保数据的一致性。如何使用TransactionScope呢要使用它您需要添加System.Transactions的引用如果你使用的是.net core的话。这个引用被包含在netcoreapp2.2\System.Transactions.Local.dll 中 该引用是框架库的一部分通常默认情况下不会自动添加。添加后在我们想要使用它的地方添加名称空间 System.Transactions即可。代码如下所示在上面的代码中我们可以看到我们在创建TransactionScope实例时使用了using 语句块及Disposable块它确保了当dispose离开块并结束事务范围时调用dispose来进行资源的释放。在一个Transaction范围中我们可以做多个连接甚至链接到不同数据库的操作的如下所示下面我们使用两个不同的数据库连接字符串来连接不同的数据库。当然我们也可以根据我们的业务要求使用尽可能多数据库。我们也可以再事务中嵌套事务。如下代码所示这里最顶层的事务范围称为根范围。另外这里需要注意的是即使通过调用scope.Complete完成内部事务上面的OtherTransaction 如果由于各种原因无法调用rootscope complete那么整个事务也将被回滚包括内部的事务。*注意执行分布式trsanctions时您可能会收到以下异常之一*服务器上的MSDTC不可用已禁用分布式事务管理器MSDTC的网络访问。这两个错误都是由于同样的原因第一个是在数据库和应用程序是同一个服务器时发生的而在另一个则是服务跟数据库分别部署在两台服务器上。对于同一台服务器请转到run- cmd- services.msc。运行名为Distributed Transaction Coordinator的服务并自动启动启动类型以便在系统重新启动时再次启动它。对于2你可能需要参照这个链接的内容进行相应的设置TransactionScope 类提供了多个重载构造函数它们接受 TransactionScopeOption 类型的枚举而该枚举定义事务范围行为。TransactionScope对象有以下三个选项Required联接环境事务或者在环境事务不存在的情况下创建新的环境事务。RequiresNew成为新的根范围也就是说启动一个新事务并使该事务成为其自己范围中的新环境事务。Suppress根本不参与事务。 因此没有环境事务。如果用 Required] 实例化范围并且存在环境事务则该范围会联接该事务。 相反如果不存在环境事务该范围就会创建新的事务并成为根范围。 这是默认值。 在使用 Required时无论范围是根范围还是仅联接环境事务该范围中的代码都不需要有不同的行为。 该代码在这两种情况下的行为应相同。如果用 RequiresNew 实例化范围则它始终为根范围。 它会启动一个新事务并且其事务成为该范围中的新环境事务。如果用 Suppress 实例化范围则无论是否存在环境事务范围都从不参与事务。 始终使用此值实例化的作用域具有null作为其环境事务。下面来让我们看一组实例代码在这里我们使用不同的TransactionScopeOptions在父事务下创建了三个事务。默认情况下范围是required 这里父事务就是采用的这个默认参数进行创建的。它是一个创建新事务的根范围并将其标记为环境事务。scope1也是使用required创建的因为我们已经有了一个环境事务范围所以它加入到父事务中。scope2是使用RequiresNew选项创建的这意味着它是一个独立于环境事务处理的新事务。scope3是用suppress创建的选项这意味着它不参与任何环境事务。无论环境事务是否成功执行它都会被执行。父全局范围完成后将提交所有环境事务。注意点EF Core 依赖数据库提供程序以实现对 System.Transactions 的支持。 虽然支持在 .NET Framework 的 ADO.NET 提供程序之间十分常见但最近才将 API 添加到 .NET Core因此支持并未得到广泛应用。 如果提供程序未实现对 System.Transactions 的支持则可能会完全忽略对这些 API 的调用。 SqlClient for .NET Core 从 2.1 及以上版本开始支持 System.Transactions。如果尝试在低版本中 如.NET Core 2.0中尝试使用该功能将引发异常。自版本 2.1 起.NET Core 中的 System.Transactions 实现将不包括对分布式事务的支持因此不能使用 TransactionScope 或 CommittableTransaction 来跨多个资源管理器协调事务。主要是不依赖windows中的mstsc功能。异步方法使用时需要注意在下面的例子中我们在TransactionScope内部使用await。usingvar scope new TransactionScope { var groups await Context.ProductGroups.ToListAsync。ConfigureAwaitfalse; }看起来没有问题但它会抛出一个 System.InvalidOperationException:A TransactionScope must be disposed on the same thread that it was created.原因是默认情况下TransactionScope不会从一个线程切换到另一个线程。为了解决这个问题我们必须使用 TransactionScopeAsyncFlowOption.Enabledusingvar scope new TransactionScopeTransactionScopeAsyncFlowOption.Enabled { var groups await Context.ProductGroups.ToListAsync。ConfigureAwaitfalse; }现在应该可以了吧这取决于下面的情况。如果我们使用和不使用TransactionScopeAsyncFlowOption这个选项的时候都使用了相同的数据库连接并且第一次执行的时候没有使用这个选项那么我们会得到另一个异常 System.InvalidOperationException:Connection currently has transaction enlisted. Finish current transaction and retry.换句话说由于第一个访问的原因第二个会话将会失败。如下代码所示想象一下如果第一个调用是在第三方库或您正在使用的框架中完成的二您不了解其中的代码 - 如果您之前没有看到此错误那么你讲无从下手来解决这个问题。总结本文带着大家熟悉了一遍TransactionScope并对其使用进行了介绍同时介绍了在.NET Core中使用TransactionScope的一些注意事项希望对大家有所帮助。另附上.NET Core实战项目交流群637326624您的支持是我持续更新的动力。动动手指扫描下方二维码关注.NET Core实战公众号
http://www.pierceye.com/news/366561/

相关文章:

  • 泰州网站建设搭建工程造价网
  • 网站流程优化c2c模式举例子
  • 帝国网站调用图片集网店平台有哪些
  • 做flash音乐网站的开题报告删除wordpress左上角
  • php网站开发学什么衡水大型网站建设
  • 广州网站开发软件平台wordpress 问号
  • 西安市建设干部学校网站厦门网站优化服务
  • 深圳市南山区住房和建设局官方网站如何把html网站改为asp网站
  • 网站建设有什么技术做dw网站图片怎么下载地址
  • 初中生如何做网站潍坊网站开发
  • 如何修改用织梦做的网站的模板价格对比网站开发
  • 单位建设网站的作用意义家在深圳坂田业主论坛
  • 网站什么时候备案好宜昌网站建设
  • 那个网站可以查询美做空基金竹中建设官方网站
  • 做直播网站找哪个网站网站平台推广方法
  • 查工程中标信息哪个网站成都网站建设 致尚
  • 做硅胶的网站wordpress googleapis
  • 做网站 简单外包常见的管理信息系统有哪些
  • 做网站一万静海网站开发
  • 视频模板在线制作网站空客德国公司
  • 如何编程制作自己的网站献县做网站价格
  • 成都网站品牌设计设计教育培训
  • 无代码做网站wordpress添加模板后台显示
  • 中山做网站费用国内做网站好的公司
  • 搬瓦工putty做网站建设网站证书
  • 江西网站开发哪家好平面设计主要是做什么的
  • 邱启良 深圳网站建设网站开发 加密存储 解密 二次计算
  • 肥城网站设计公司商务网站要怎么做
  • 做网站的毕设用什么软件统计wordpress
  • 网站备案 游戏易企推