我可以创建一个实体框架控制台应用程序,在Northwind数据库中显示客户。
但是,当我尝试在单独的子项目中由简单的C#控制台应用程序使用的单独的类库中创建Northwind实体框架时,我遇到了一些问题。
我看了http://www.dotnetcurry.com/showarticle.aspx?ID=617 并观察http://msdn.microsoft.com/en-us/data/ff628208.aspx并按照说明将app.config中的连接字符串从库复制到控制台模式程序目录,并添加对我的northwind EF类库的引用。
我在控制台程序中尝试创建dbcontext变量时仍然遇到此异常:
An unhandled exception of type 'System.InvalidOperationException' occurred in mscorlib.dll
Additional information: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
经过一些谷歌搜索,我尝试添加此代码:
public abstract class BaseDomainContext : System.Data.Entity.DbContext{
static BaseDomainContext() {
var ensureDLLIsCopied = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}
}
现在的问题是我得到了下面的红色波浪线" SqlServer" - 显然我的System.Data.Entry副本中没有这样的命名空间。我刚刚用nuget升级到EF 6。
任何人都可以帮我解决这个问题吗?
由于
齐格弗里德
2014年3月30日星期日: 忘记提及:我在Windows 8.1上使用Visual Studio 2013。这是我的控制台模式演示程序中的app.config,其中大部分都是从类库app.config中复制而来的。现在我考虑一下,谁在寻找那个连接字符串?它是类库还是我的控制台模式演示程序?什么应该是连接字符串的名称?
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<connectionStrings>
<add name="NorthwindEntitiesLib" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="data source=KM;initial catalog=Northwind;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
2014年3月31日星期一: 一切都适用于VS 2012.我只是添加对类库的引用,将大部分App.config文件从库app.config剪切并粘贴到控制台模式app.config,一切正常。我们可以从中得出什么结论?看起来VS2013中有一个带有EF 6的错误。任何人都可以帮我解决这个错误吗?
Ben:我尝试了你的建议,根据你发布的XML判断,看起来你正在使用EF 5.我刚升级到6.我在VS 2013中仍然遇到同样的错误。答案 0 :(得分:0)
它位于System.Data.dll中,即System.Data.SqlClient
。
确保您有参考。
您可以发布连接字符串吗?
答案 1 :(得分:0)
这个对我有用 - 我刚刚创建了一个新项目,并在项目中添加了一个新的.edmx文件并调用:
using (YourDbContext db = new YourDbContext(){///}
这将调用上下文的无参数构造函数,该上下文使用app.config中的默认连接字符串设置。亲自看一下构造函数,看看自动生成了什么,然后你就会看到正在使用什么连接字符串。
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="NorthwindEntitiesLib" connectionString="metadata=res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl;provider=System.Data.SqlClient;provider connection string="data source=KM;initial catalog=Northwind;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
</configuration>