7

我正在尝试使用 SQL Server (2005) 中的 DB first 迁移来设置一个简单的 ASP.NET MVC 4 webapp。我已经在数据库中创建了表,并使用 Entity Framework 在代码中创建了对象。我可以使用这些对象访问数据。

当我尝试WebSecurity.InitializeDatabaseConnection("FLMREntities", "UserProfile", "UserId", "UserName", true);在 Global.asax.cs 文件中使用初始化 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]。

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

4

3 回答 3

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);
于 2013-11-16T13:30:27.287 回答
1

这可能是this的副本。

根据我对这个问题的记忆,您需要确保已注册 sqldata 提供程序。有时,在您的 machine.config 中有一个重复的条目需要删除,如果我没记错的话,可能有一个错误的条目需要删除。看看这个 msdn 帖子,这个信息大约在页面的中间。

到另一个 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 Provider 没有在您的机器上注册。您需要将上述部分添加到您的 web.config 中。您还需要确保在您的项目中引用了 System.Data.SqlClient。

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

祝你好运!

编辑:一条关键信息是版本需要与您正在使用的文件匹配。在 type="blabh..blah..blah..Version=2.0.0.0, blah blah" 中,它需要是您正在使用的文件的版本,因此右键单击您的文件并获取文件版本。如果失败,请尝试版本的变体。我相信我的文件是 2.0.0.1 但 Version=2.0 是我这样做的时候起作用的。只需根据您的版本号尝试几个不同的版本(例如 2.0、2.0.0、2.0.0.1)。

于 2013-03-04T16:49:30.047 回答
0

只是想在这里插话,我遇到了这个问题,通过查看我的 machine.config 来查找我正在运行的目标 .NET 版本......在结构中:

确保您的目标数据提供者在其中正确输入,每个提供者只有一个(我已经看到重复导致问题),以及确保它是有效的 XML,并且您只有一个 DBProviderFactories 条目。就我而言,我在最初的条目之后有一个条目(基本上是两个条目,一个是我的提供者,一个是空白的),而空白导致了所有问题。

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

于 2013-10-03T00:28:25.450 回答