这似乎与使用代码优先或本地数据库实例时EF未连接到SQL Server数据库的常见错误配置问题有关。但是,我的方案不包括其中任何一个。我正在尝试运行一个包含34个项目的生产应用程序,这些项目刚刚从SVN中提取,连接到几个不同的远程SQL框。当我调试时,我得到了这个异常,它似乎是第一次尝试访问主db:
ProviderIncompatibleException
The Provider did not return a ProviderManifestToken string.
内部例外:
Login failed for user 'DOMAIN\\MACHINE-NAME$'.
堆栈追踪:
at System.Data.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection)
at System.Data.Entity.ModelConfiguration.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest)
at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
at System.Data.Entity.Internal.InternalContext.Initialize()
at System.Data.Entity.Internal.LazyInternalContext.get_ObjectContext()
at System.Data.Entity.DbContext.System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext()
at XX.Service.Base.GenericRepository`1.Get(String predicate, Object[] values, Int32 PageNumber, Int32 PageSize, List`1 SortColumns, String[] path) in [...]
at XX.Service.Base.GenericRepository`1.Get(SearchCommand cmd, String[] path) in [...]
这条线路失败:
ObjectContext objectContext = ((IObjectContextAdapter)Context).ObjectContext;
我的连接字符串:
<add name="ProdContext" connectionString="Data Source=SERVER.companydomain.com\XX,51332;Initial Catalog=ProdDB;Integrated Security=true;" providerName="System.Data.SqlClient"/>
我已经查看了搜索“providerincompatibleexception登录失败”中列出的每个SO问题,但答案仍然没有找到。我可以使用Windows身份验证使用SSMS登录SQL服务器。 DBA说我和其他应用程序开发人员在同一个访问组中。我在本地IIS管理器中无休止地使用目录权限和身份验证设置。在调试时,如果检查基础Context,则服务器地址和连接字符串是正确的。
我必须在某处丢失配置设置。我可以在生产网站上使用该应用程序,但不能使用我当地的VS2012版本。我还能检查什么?我错过了什么?我希望能够得到一个成功的构建,并在其余的开发者从他们的假期假期回来之前加快速度......
答案 0 :(得分:1)
我认为这更多地与内部异常相关而不是外部:
Login failed for user 'DOMAIN\\MACHINE-NAME$'
我猜您使用的是本地IIS Web服务器,而不是Visual Studio开发服务器。
我相信应用程序池的标识会影响这一点。该文档或运行ASP.NET / IIS服务的帐户。
IIS管理器 - &gt;应用程序池 - &gt;右键单击应用程序运行的池 - >高级设置 - &gt;身份
我相信这是使用集成安全连接字符串时将用于SQL Server的帐户。
将该设置与其他开发人员的计算机进行比较。
此外,在IIS管理器 - &gt;网站 - &gt;单击您的网站 - &gt;基本设置下,有一个“连接为”选项。如果你有嵌套网站,通常这会继承,但有一次我必须在嵌套网站上明确地设置它,以解决传递错误用户进行身份验证的问题。