.net 实体框架6和自定义控件

.net 实体框架6和自定义控件,.net,entity-framework,user-controls,.net,Entity Framework,User Controls,我正在创建一个自定义用户控件,它最终将用于多个项目。它将是一个fat控件,包含许多业务逻辑,并访问SQL数据库以加载数据和验证用户操作。(我的要求之一是尽可能简单地将其放到新窗体上。)因此,我有一个“Windows窗体控件库”项目,其中包含一个用户控件。我正在用实体框架6建立一个edmx。我针对我的数据模型编写一个LINQ查询,返回几行数据,并使用这些数据填充组合框。现在我想测试一下。因此,我将WinForms项目添加到解决方案中,将控件添加到Form1中,然后运行测试项目。我得到以下错误: 在

我正在创建一个自定义用户控件,它最终将用于多个项目。它将是一个fat控件,包含许多业务逻辑,并访问SQL数据库以加载数据和验证用户操作。(我的要求之一是尽可能简单地将其放到新窗体上。)因此,我有一个“Windows窗体控件库”项目,其中包含一个用户控件。我正在用实体框架6建立一个edmx。我针对我的数据模型编写一个LINQ查询,返回几行数据,并使用这些数据填充组合框。现在我想测试一下。因此,我将WinForms项目添加到解决方案中,将控件添加到Form1中,然后运行测试项目。我得到以下错误:

在中找不到名为“MyDatabaseEntities”的连接字符串 应用程序配置文件

对。。。我需要用所有EF6配置更新App.config。因此,我将大部分App.Config从我的控制库项目复制到WinForms测试项目的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="MyDatabaseEntities" connectionString="metadata=res://*/MyDatabase.csdl|res://*/MyDatabase.ssdl|res://*/MyDatabase.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MyServer;initial catalog=MyDatabase;persist security info=True;user id=testuser;password=testpassword;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

更多
信息

我可以通过将EF6添加到测试项目中来解决这个问题,但这似乎并不正确。我希望我的控件封装所有的数据访问。只要我在App.Config中有EF配置信息,就足够了,对吗?但是,如果我将EF添加到测试项目中,显然会缺少一些可以修复的东西。谁能告诉我除了添加EF之外,我还需要对测试项目做些什么?(或者有没有更好的方法,完全做到我的拍摄目标?)


谢谢

因为您的
web.config
包含以下行:

<provider 
    invariantName="System.Data.SqlClient"
    type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />


您的应用程序bin文件夹中需要有正确的DLL。在本例中,所需的库是
EntityFramework.SqlServer.dll
。但是,您几乎肯定也需要
EntityFramework.dll

因为您的
web.config
包含以下内容:

<provider 
    invariantName="System.Data.SqlClient"
    type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />


您的应用程序bin文件夹中需要有正确的DLL。在本例中,所需的库是
EntityFramework.SqlServer.dll
。但是,您几乎肯定也需要
EntityFramework.dll

我在测试项目的\bin\debug\文件夹中看到4个EF程序集:Microsoft.Practices.EnterpriseLibrary.Caching.dll、Microsoft.Practices.EnterpriseLibrary.Common.dll、Microsoft.Practices.EnterpriseLibrary.Data.dll、,Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.dllD'oh!很抱歉。我的脑袋一下子在好几个地方动了起来。我的\bin\debug\文件夹中有EntityFramework.dll。还有更多吗?你知道什么?看来这就是解决办法。因此,我认为我需要确保在准备就绪时,使用我的控件分发这两个程序集(都是内部的,但我们希望为其他开发人员提供某种分发包)。但似乎就是这样。非常感谢。请将此作为答复提交,以便我可以接受,您可以申请奖金。我在测试项目的\bin\debug\文件夹中看到4个EF程序集:Microsoft.Practices.EnterpriseLibrary.Caching.dll、Microsoft.Practices.EnterpriseLibrary.Common.dll、Microsoft.Practices.EnterpriseLibrary.Data.dll、,Microsoft.Practices.EnterpriseLibrary.ExceptionHandling.dllD'oh!很抱歉。我的脑袋一下子在好几个地方动了起来。我的\bin\debug\文件夹中有EntityFramework.dll。还有更多吗?你知道什么?看来这就是解决办法。因此,我认为我需要确保在准备就绪时,使用我的控件分发这两个程序集(都是内部的,但我们希望为其他开发人员提供某种分发包)。但似乎就是这样。非常感谢。请将此作为答复提交,以便我可以接受,您可以申请赏金。