我有一个在ASP.NET MVC 3上运行的应用程序,它的实体框架代码优先。在开发过程中,我使用了一个SQL Compact数据库,但在将其移动到我的虚拟服务器时,我正试图以SQL Express为目标。
最初有一些问题与"CREATE DATABASE in master"错误有关,我通过将SQL Compact数据库中的模型提取到SQL脚本中,并在服务器上执行该脚本来创建数据库,从而解决了这个问题。
我创建了一个新的连接字符串来指向SQL Express实例,它使用EF格式:
<add name="LouiseClarkEntities" connectionString="metadata=res://*/Models.LouiseClark.csdl|res://*/Models.LouiseClark.ssdl|res://*/Models.LouiseClark.msl;provider=System.Data.EntityClient;provider connection string="Data Source=.SQLEXPRESS; Initial Catalog=LouiseClark; User ID=<username>; Password=<password>"" providerName="System.Data.EntityClient" />
我现在在导航到使用DB的页面时遇到的错误是:
Unable to find the requested .Net Framework Data Provider. It may not be installed.
我已经在服务器上安装了Entity Framework 4.1,试图看看这是否能解决问题,但它似乎没有起到多大作用。
错误页面上堆栈跟踪的代码段:
[ArgumentException: Unable to find the requested .Net Framework Data Provider. It may not be installed.]
System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1420567
System.Data.EntityClient.EntityConnection.GetFactory(String providerString) +35
[ArgumentException: The specified store provider cannot be found in the configuration, or is not valid.]
任何帮助都将不胜感激,因为这已经困扰了我好几天了!
谢谢,
Chris
首先使用带有代码的正常连接字符串。
<add name="LouiseClarkEntities" connectionString="Data Source=.SQLEXPRESS; Initial Catalog=LouiseClark; User ID=<username>; Password=<password>" providerName="System.Data.SqlClient" />
关于第二个问题,以及第一个问题的部分原因。。。
你做错的是which I got around by extracting the model from the SQL Compact database into an SQL script and executing that on the server to create the DB.
您应该为此使用迁移脚本,然后在PM控制台中使用Update-Database -Script
来转储所需内容,然后将其部署到服务器数据库中。
问题是CF有自己的表和数据需要正确初始化。如果这不匹配,你最终会得到这样的结果。