2013-03-04 139 views
7

我想建立一个简单的ASP.NET MVC 4 webapp使用数据库首先从SQL Server迁移(2005年)。我已经在数据库中创建了表,并使用实体框架在代码中创建对象。我可以使用这些对象访问数据。无法找到请求的.Net Framework数据提供程序。 (SqlClient)

当我尝试在Global.asax.cs文件中使用WebSecurity.InitializeDatabaseConnection("FLMREntities", "UserProfile", "UserId", "UserName", true);初始化WebSecurity时,出现问题。我尝试使用模板附带的InitializeSimpleMembershipAttribute过滤器,并得到相同的问题。我得到的错误信息:

Unable to find the requested .Net Framework Data Provider. It may not be installed. 

下面是相关的连接字符串:

<add name="FLMREntities" 
    connectionString="metadata=res://*/Models.FLMR.csdl|res://*/Models.FLMR.ssdl|res://*/Models.FLMR.msl; 
        provider=System.Data.SqlClient; 
        provider connection string=&quot;data source=notes.marietta.edu; 
         initial catalog=muskwater; 
         user id=muskwater;password=********; 
         MultipleActiveResultSets=True; 
         App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" /> 

而且,我已经创建了数据库中的成员表以匹配该模板创建。如果我将Initialize调用中的最终参数更改为false(以便它不尝试自动创建表),则返回它无法找到UserProfile表。我也尝试过名称变体,如[dbo]。[UserProfile]。

我只需要一个简单的账户模型来允许用户登录并允许某些用户查看更多内容。

+0

你的连接字符串(S)之前有一个''?为了防止你从其他配置继承任何 – Basic 2013-03-04 16:53:29

+0

我在这个项目中没有其他连接字符串。我从模板中注释掉了一个。我是否还需要'',并且将与上面的嵌套级别相同? – amoscardino 2013-03-04 19:34:55

+0

机器/站点范围的配置可以将连接字符串添加到您的应用程序。有些框架也是如此。 ''应该是与连接字符串相同部分中的第一个元素(加载配置节时顺序会被保留)。 – Basic 2013-03-04 21:56:00

回答

1

这可能是this的副本。

从我记得的这个问题,你需要确保sqldata提供程序已注册。有时候,在你的machine.config中有一个需要删除的重复条目,如果我没有记错的话,可能会有一个错误的条目需要删除。看看this msdn post,这个信息大约在页面的一半。

指向其他SO的链接有一些可能有用的链接。如果这最终没有被标记为重复问题,我可以在这里添加它们,或者做任何适当的事情。

你正在寻找的部分将类似于此,我认为:

<system.data> 
    <DbProviderFactories> 
    <add name="SqlClient Data Provider" 
    invariant="System.Data.SqlClient" 
    description=".Net Framework Data Provider for SqlServer" 
    type="System.Data.SqlClient.SqlClientFactory, System.Data, 
    Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
    /> 
    </DbProviderFactories> 
</system.data> 

从您在评论中提供的信息,似乎这是你的machine.config中失踪。除非我误认为(可能),这意味着SQL提供程序未在您的计算机上注册。你需要将上面的部分添加到你的web.config中。您还需要确保在您的项目中引用了System.Data.SqlClient。

如果您的目标机器上没有安装它,那么您将需要做更多工作来完成安装。我希望我可以帮助你更多,但当我这样做时,它是用于SqlServerCE的,所以我使用的文件有很大的不同。

祝你好运!

编辑: 一个重要的信息,是版本需要匹配您正在使用的文件。在type =“blabh..blah..blah..Version = 2.0.0.0,blah blah”这需要是您使用的文件的版本,所以请右键单击您的文件并获取文件版本。如果失败,请尝试版本的变体。我相信我的文件是2.0.0.1,但版本= 2.0是我做到这一点时的工作。只需根据您的版本号尝试几个不同的版本(例如2.0,2.0.0,2.0.0.1)。

+0

这个问题的答案并不能解释如何解决这个问题。我找到了machine.config文件,并且只有SqlServerCe的DbProviderFactory条目。我需要为SqlClient添加一个条目吗?它会看起来像你发布的吗? – amoscardino 2013-03-04 19:40:11

+0

我不会修改machine.config,除非你知道你在做什么。让我看看能否找到我遇到这个问题时使用的资源,以便您有更好的想法。 – 2013-03-04 19:47:54

+0

另外,仅供参考,当我有与您一样的错误(在运行时),这是解决方案。我必须确保部署正确的文件,并且必须将我列出的部分添加到我的web.config中。 – 2013-03-04 19:58:04

0

只是想在这里编钟,我有这个问题,通过查看我的machine.config的目标.NET版本,我跑了... ...结构中:

确保目标数据提供正确内有输入,只有每提供商(我已经看到重复导致问题)之一,以及,确保它是有效的XML,以及您只有一个DBProviderFactories条目。在我的情况下,我在初次入境后有一个条目(基本上有两个条目,一个与我的提供者,一个空白),空白导致了所有问题。

希望这可以帮助别人有同样的问题:)

4

我有一个类似的问题,我做了什么: 我修改了默认的连接。我已经为EDMX模型的连接字符串,它是这样的:

<add name="ChemicalReporterEntities" connectionString="metadata=res://*/ChemicalDB.csdl|res://*/ChemicalDB.ssdl|res://*/ChemicalDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQLExpress;initial catalog=ChemicalReporter;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

但我不能与SimpleMemebrship提供商使用它。因此,在Visual Studio中我打开服务器资源管理器>数据连接,我选择我的连接,单击鼠标右键,属性,我从那里复制的连接字符串,并将其粘贴到defaultConnection:

<add name="DefaultConnection" connectionString="Data Source=.\SQLExpress;Initial Catalog=ChemicalReporter;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework" providerName="System.Data.SqlClient" /> 

之后,我改变WebSecurity.InitializeDatabaseConnection使用DefaultConnection。

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", true); 
相关问题