gpt4 book ai didi

sql-server - Symfony2 + Doctrine2 + SQL Server - 事务支持

转载 作者:行者123 更新时间:2023-12-02 04:00:41 25 4
gpt4 key购买 nike

我正在 Symfony2 中开发一个连接到 SQL Server 实例的私有(private)企业应用程序。我在处理 SQL Server 时遇到了很多问题,但到目前为止我已经解决了它,直到现在。我正在使用 FreeTDS + DBLib 连接到 SQL Server 实例,并且此驱动程序不支持事务。这导致我遇到以下问题:

每次我尝试持久化一个对象时,Symfony(或 Doctrine)都会提示:

request.CRITICAL: 
PDOException:
This driver doesn't support transactions (uncaught exception) at /.../Doctrine/DBAL/Connection.php line 858

我的第一个想法是禁用事务,因为我通过应用程序进行的数据修改很少。我已经通过 Doctrine's Documentation 搜索了该主题,但找不到任何相关信息。

所以,我的问题是:对于这种缺乏事务支持(一些配置选项,甚至编辑 Doctrine 的 DBAL 源)是否有任何解决方法。

并且:切换到 Propel 会更顺畅吗?我在他们的网站上读到他们支持 SQL Server,并且有关于如何配置 Propel 以便正确使用它的文档。

最佳答案

这是一个 PDO 异常,每当您尝试通过 PDO::beginTransaction() 在非事务性数据库上启动事务时都会引发此异常。

Doctrine 通常会通过在工作单元内部将它们排队来处理事务,然后在 flush() 时将它们编写为单个优化查询。

不幸的是,当一个工作单元被提交(通过刷新)时,它似乎为你开始了一个事务。

//UnitOfWork::commit($entity = null);
$conn->beginTransaction();

据我所知,这会在您使用的任何数据库驱动程序上暂停自动提交模式,并在您尝试持久化某些内容时触发您得到的错误。

简而言之,学说似乎不支持非事务性数据库交互。

似乎有些人试图修改 Annotation 驱动程序以允许他们将引擎类型指定为非事务性的。不过,不确定这与底层 ORM 的效果如何。

http://www.doctrine-project.org/jira/browse/DDC-972

关于sql-server - Symfony2 + Doctrine2 + SQL Server - 事务支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10640763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com