使用Azure Service Token Provider for Entity Framework 6正在破坏迁移工



我按照https://learn.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-connect-msi从用户名/密码连接字符串转换为使用MSI进行身份验证。该应用程序运行良好,并在本地开发和在Azure应用程序服务上运行时向SQL服务器进行身份验证。

但是,现在,当我尝试通过Package Manager控制台添加/获取迁移时,它不再工作。

Get Migrations现在产生:No migrations have been applied to the target database.

我试着切换回旧的基于用户名/密码的连接字符串,但仍然得到了相同的输出。但是,如果我注释掉web.config中注册SqlAuthenticationProviders:的部分

<SqlAuthenticationProviders>
<providers>
<add name="Active Directory Interactive" type="Microsoft.Azure.Services.AppAuthentication.SqlAppAuthenticationProvider, Microsoft.Azure.Services.AppAuthentication" />
</providers>
</SqlAuthenticationProviders>

然后Get-Migrations开始使用我的旧连接字符串正常工作。我如何配置这个身份验证提供程序;添加迁移";以及";获取迁移"工作工具?

  • 带有代码优先迁移的实体框架6.4.4
  • .NET Framework 4.7.2
  • ASP.net MVC

感谢

问题最终有两个方面:

  1. 我们在一个独立于web项目的项目中有EF上下文。我不得不添加Microsoft.Azure.Services.AppAuthentication包和配置更改,以便为包含上下文和迁移的项目启用SQL身份验证提供程序。

  2. 解析(1(后,用户名/密码连接字符串将再次工作,即使已注册身份验证提供程序,但Azure AD令牌身份验证仍然无法使用EF包管理器控制台工具。这是由于dll(Microsoft.IdentityModel.Clients.ActiveDirectory(由于版本不匹配而无法加载。我让两个项目都使用了这个包的同一版本,并更正了绑定重定向,然后AD身份验证工作了。

关键是Get-Migrations没有提供任何错误输出,只是说没有迁移。然而,运行更新数据库更具启发性,因为它实际上提供了一个异常,指示身份验证失败的原因

我认为问题围绕着这样一个事实,即应用程序基于web应用程序项目包/配置正常工作,而EF cli工具似乎直接使用了其他项目DLL,而web项目中的web.config导致了不一致。

相关内容

最新更新