【问题标题】:EntityFramework6 Configuration with WCF Service boundraryEntityFramework6 配置与 WCF 服务边界
【发布时间】:2015-12-02 18:35:27
【问题描述】:

我正在尝试构建一个涉及 WCF 服务的解决方案,该服务调用包含 EntityFramework6 模型的 dll。但是,当我尝试对服务进行单元测试时,我收到一条消息: Additional information: No connection string named 'SyslogEntities' could be found in the application config file.

我的流程在逻辑上安排为:

SyslogDataSvcTest.dll (app.config has service bindings) -> 
      SyslogDataSvc.svc (web.config has provider and connection string) ->
           LibSyslogData.dll (app.config has providers and connection string)

所有涉及 EF 的代码都在 libSyslogData.dll 中。它在内部将数据映射到上层对象,并返回它们,而不是暴露自己的模型信息,所以 EF 的使用应该是真正隔离的。

那我做错了什么?

编辑: 我让它运作良好,但可能以一种奇怪的方式。在安装 EF 和 MySql 依赖项时,NuGet 似乎没有正确指定我的 app.config 中的设置。

相反,我创建了一个代码内配置类,如 MSDN 中所述: https://msdn.microsoft.com/en-us/data/jj680699

现在我有了这个课程:

public class EFConfiguration : DbConfiguration {
    public EFConfiguration()
    {

        //For some reason this works much better than the app.config.
        //With this defined, upper layer config documents need only specify the "SyslogEntities" Connection string.
        SetExecutionStrategy("MySql.Data.MySqlClient", () => new MySqlExecutionStrategy());
        SetDefaultConnectionFactory(new MySqlConnectionFactory());
        SetProviderFactory("MySql.Data.MySqlClient", new MySqlClientFactory());
        SetProviderServices("MySql.Data.MySqlClient", new MySqlProviderServices());
    }
}

我可以将DB实现的细节留给数据层,只在上层配置连接字符串。

【问题讨论】:

    标签: c# mysql wcf entity-framework-6


    【解决方案1】:

    您很可能不会基于该异常测试实际的 wcf 服务(我的意思是在线)。我认为您只是对 wcf 服务 dll 代码进行单元测试。所以这意味着使用的 app.config 来自单元测试程序集。应用程序运行时只需 1 个 app.config,对于类库有一个 app.config 也没有任何意义。

    您需要提供 EF 数据访问层在单元测试程序集中使用的 EF 连接字符串,就像您在 wcf 服务 web.config 中所做的那样(因为您没有测试在线 wcf 服务)。如果您希望在单元测试和 wcf 服务配置中完全没有 EF 引用,则需要覆盖 EF 实体的默认构造函数并在您的应用程序/Web 配置中提供“普通”dbprovider + 连接字符串并创建 EF 连接即时字符串。

    【讨论】:

    • 谢谢!我正在一个解决方案中调试所有内容(用于调试的 IIS 8 express),所以回想起来,单元测试可能正在跳过服务托管,并按照您的建议直接进入 dll。我通过将连接字符串(我在发布之前尝试过)以及实体框架提供程序、提供程序工厂和连接工厂定义添加到单元测试 app.config 来使其工作。我有点惊讶它的工作原理,因为它包含对 Mysql 库的引用,但它并没有让我直接引用 dll。
    • 奇怪的是,看起来基于代码的定义效果更好。在将配置移动到单元测试类之前,我创建了一个配置类,一切正常,但是当我删除配置类时,我开始收到提供程序定义错误。我认为通过 NuGet 安装 EF 和 MySql 时生成的配置代码不正确。感谢您的帮助。
    猜你喜欢
    • 2011-04-28
    • 1970-01-01
    • 2010-09-18
    • 2011-07-26
    • 2013-06-10
    • 2011-10-04
    • 2017-12-17
    • 2014-03-28
    • 1970-01-01
    相关资源
    最近更新 更多