EF6 и MSTest в TeamCity: поставщики Entity Framework должны наследоваться от этого класса, а элемент «Экземпляр» должен возвращать одноэлементный экземпляр.

Я столкнулся с некоторыми проблемами с MSTest, когда они запускаются внутри teamcity. Когда я запускаю их в VisualStudio на локальной машине, все работает хорошо.

[08:05:21][ProjName.Data.Tests.HistoryTableHandlingTest.HistoryProgressTest] Метод инициализации класса ProjName.Data.Tests.HistoryTableHandlingTest.Init вызвал исключение. System.InvalidOperationException: System.InvalidOperationException: >Экземпляр типа поставщика Entity Framework 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version= 6.0.0.0, культура = нейтральная, PublicKeyToken=b77a5c561934e089' не возвратил объект, наследуемый от System.Data.Entity.Core.Common.DbProviderServices'. Поставщики Entity Framework должны наследоваться от этого класса, а член "Экземпляр" должен возвращать единственный экземпляр поставщика. Это может быть связано с тем, что поставщик не поддерживает Entity Framework 6 или более позднюю версию; см. http://go.microsoft.com/fwlink/?LinkId=260882. больше информации..

Вот мой app.config для проекта MSTest:

<?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>

Еще одна вещь, о которой я хотел бы упомянуть, это то, что я не использую библиотеку EntityFramework из NuGet, а клон EntityFramework.HierarchyId (ее также можно найти в NuGet).


person Tomino    schedule 18.05.2015    source источник
comment
Можете ли вы попробовать использовать стандартную библиотеку EntityFramework, чтобы увидеть, возникает ли проблема? Возможно, было бы полезно сначала исключить это.   -  person John Hoerr    schedule 18.05.2015
comment
Поскольку я использую HierarchyId в своем коде, это может быть проблемой...   -  person Tomino    schedule 19.05.2015


Ответы (1)


После того, как я переписал все тесты на NUnit, я получил те же результаты. Но похоже, что основная причина такого поведения заключалась в том, что на сборочном агенте MS Sql Server Express не был установлен должным образом. Когда я переустановил последнюю версию SQL Express, все стало работать как шарм. Кажется, в системе отсутствовали некоторые драйверы или библиотеки для LocalDB.

Я надеюсь, что это поможет кому-то еще.

person Tomino    schedule 03.06.2015