TeamCity 中的 EF6 和 MSTest:实体框架提供程序必须从此类继承,并且“实例”成员必须返回单例实例

Posted

技术标签:

【中文标题】TeamCity 中的 EF6 和 MSTest:实体框架提供程序必须从此类继承,并且“实例”成员必须返回单例实例【英文标题】:EF6 and MSTest in TeamCity: Entity Framework providers must inherit from this class and the 'Instance' member must return the singleton instance 【发布时间】:2015-07-29 14:35:36 【问题描述】:

当 MSTest 在 teamcity 中运行时,我遇到了一些问题。当我在本地机器上的 VisualStudio 中运行它们时,一切正常。

[08:05:21][ProjName.Data.Tests.HistoryTableHandlingTest.HistoryProgressTest] 类初始化方法 ProjName.Data.Tests.HistoryTableHandlingTest.Init 抛出异常。 System.InvalidOperationException: System.InvalidOperationException : 实体框架提供程序类型的“实例”成员 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version= 6.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089' 没有返回继承自“System.Data.Entity.Core.Common.DbProviderServices”的对象实体框架提供者必须从此类继承,并且“实例”成员必须返回提供者的单例实例。这可能是因为提供者不支持实体框架 6 或更高版本;有关更多信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882..

这是我用于 MSTest 项目的 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" requirePermission="false" />
  </configSections>
  <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>

我要提到的另一件事是,我不使用 NuGet 的 EntityFramework 库,而是克隆 EntityFramework.HierarchyId(它也可以在 NuGet 中找到)。

【问题讨论】:

您可以尝试使用标准的 EntityFramework 库来查看问题是否仍然存在?首先排除这种情况可能会有所帮助。 由于我在代码中使用 HierarchyId,这可能是个问题... 【参考方案1】:

在我将所有测试重写为 NUnit 后,我​​得到了相同的结果。 但似乎,这种行为的主要原因是构建代理 MS Sql Server Express 没有正确安装。 当我重新安装最新版本的 SQL Express 时,一切都开始正常工作了。系统似乎缺少一些用于 LocalDB 的驱动程序或库。

我希望这对其他人有帮助。

【讨论】:

以上是关于TeamCity 中的 EF6 和 MSTest:实体框架提供程序必须从此类继承,并且“实例”成员必须返回单例实例的主要内容,如果未能解决你的问题,请参考以下文章

覆盖模板时 TeamCity 中的 VCS 标签

TeamCity 中的快照依赖和完成构建触发器有啥区别?

如何为多个构建配置选择不同的 app.config

无法使用 testNG 和 Allure 从 TeamCity 中的 Maven 运行测试

无法在 MStest 中使用垫片来伪造 .net 中的 SharePoint

VS2010 中的 MSTest - 如何一步启动所有负载测试