微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将Azure Service Token Provider用于Entity Framework 6破坏了迁移工具

如何解决将Azure Service Token Provider用于Entity Framework 6破坏了迁移工具

我正在按照https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-connect-msi上的说明从用户名/密码连接字符串过渡到使用MSI进行身份验证。该应用程序可以很好地运行并可以通过sql服务器进行身份验证,以进行本地开发以及在Azure应用服务上部署时运行。

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

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

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

 <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)之后,即使使用已注册的auth提供程序,用户名/密码连接字符串也可以再次使用,但是Azure AD令牌身份验证仍然无法在EF软件包管理器控制台工具中使用。最终这是由于版本不匹配导致dll(Microsoft.IdentityModel.Clients.ActiveDirectory)无法加载而导致的。我使两个项目都使用该程序包的相同版本,并更正了绑定重定向,然后AD身份验证起作用。

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

我认为问题与以下事实有关:应用程序基于Web应用程序项目包/配置正确运行,而EF cli工具似乎直接使用其他项目DLL,而Web项目中的web.config ,从而导致不一致。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。