如何使用任何实体框架(v6)库?

时间:2014-03-30 07:35:18

标签: c# entity-framework

我可以创建一个实体框架控制台应用程序,在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=&quot;data source=KM;initial catalog=Northwind;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" 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中仍然遇到同样的错误。

2 个答案:

答案 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=&quot;data source=KM;initial catalog=Northwind;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    </connectionStrings>
     <entityFramework>
        <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
     </entityFramework>
</configuration>