gpt4 book ai didi

c# - Entity Framework 6.1 将 CommitFailureHandler 设置为事务处理程序导致 SQL Server 登录失败

转载 作者:行者123 更新时间:2023-11-30 17:47:59 24 4
gpt4 key购买 nike

我已经设置了一个 SQL Server 镜像,其中包含主要镜像、辅助镜像和见证镜像,以便为我的应用程序提供自动故障转移。我一直在尝试使用 CommitFailureHandler 类,但在特定场景中使用它时遇到了问题:

  • 在连接字符串中,当前是数据库服务器Mirror 必须指定为 Data Source 并且 Principal 必须是指定为故障转移合作伙伴。
  • 应用程序必须对数据库执行迁移
  • __TransactionHistory 表不能存在

如果这三个条件中的任何一个不存在,那么它就可以正常工作。

当这种情况确实发生时,将抛出一个 SqlException,说明给定用户登录失败。我还在 SQL Server 事件日志(在镜像实例上)中显示以下消息:

  • Login failed for user 'myUser'. Reason: Failed to open the explicitly specified database 'myDatabase'.
  • Login failed for user 'myUser'. Reason: Password did not match that for the login provided.

作为记录,当三个条件中的任何一个不成立时,登录名和密码都是正确的并且可以正常工作。

这是我在数据库配置类中设置事务处理程序的行:

SetTransactionHandler(SqlProviderServices.ProviderInvariantName, () => new CommitFailureHandler());

这是怎么回事?

最佳答案

所以我在 Entity Framework 问题跟踪器上发现了这个问题:https://entityframework.codeplex.com/workitem/2050

EF 6.1 中似乎存在一个错误,在问题中给出的情况下,在创建 __TransactionHistory 表之前,凭据会从连接字符串中删除(它也出现在 SQL Azure 中)。

该错误已在最新的 EF 测试版 (6.1.1-beta1) 中修复。

关于c# - Entity Framework 6.1 将 CommitFailureHandler 设置为事务处理程序导致 SQL Server 登录失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23916620/

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