我按照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
感谢
问题最终有两个方面:
-
我们在一个独立于web项目的项目中有EF上下文。我不得不添加Microsoft.Azure.Services.AppAuthentication包和配置更改,以便为包含上下文和迁移的项目启用SQL身份验证提供程序。
-
解析(1(后,用户名/密码连接字符串将再次工作,即使已注册身份验证提供程序,但Azure AD令牌身份验证仍然无法使用EF包管理器控制台工具。这是由于dll(Microsoft.IdentityModel.Clients.ActiveDirectory(由于版本不匹配而无法加载。我让两个项目都使用了这个包的同一版本,并更正了绑定重定向,然后AD身份验证工作了。
关键是Get-Migrations没有提供任何错误输出,只是说没有迁移。然而,运行更新数据库更具启发性,因为它实际上提供了一个异常,指示身份验证失败的原因
我认为问题围绕着这样一个事实,即应用程序基于web应用程序项目包/配置正常工作,而EF cli工具似乎直接使用了其他项目DLL,而web项目中的web.config导致了不一致。