Не удалось загрузить тип поставщика Entity Framework?


323

Я пытаюсь запустить свои тесты на TeamCity, который в настоящее время установлен на моей машине.

System.InvalidOperationException:

Платформа Entity Framework тип поставщика 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' для' поставщика System.Data.SqlClient ' ADO.NET не может быть загружен. Убедитесь, что запущенное приложение доступно в качестве поставщика оборудования .

См http://go.microsoft.com/fwlink/?LinkId=260882 для получения дополнительной информации ..

Я не имею никакого отношения к System.Data.Entity ни в одном из моих проектов, как это было предложено на CodePlex для обновления до EF6.

Итак, я не уверен, почему я получаю это исключение. Я не получаю такого исключения, когда я запускаю тесты из VS.

Я попытался установить CopyLocal на false, а затем снова на true .. но это тоже не работает.

Update

Мой 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> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    </entityFramework> 
</configuration> 

Я получаю следующую стекловидную команду в команде.

[MSTest] IntegrationTests.CrudTest+QuestionTest.Create 
[03:59:11][IntegrationTests.CrudTest+QuestionTest.Create] Initialization method IntegrationTests.CrudTest+QuestionTest.Initialize threw exception. System.InvalidOperationException: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' for the 'System.Data.SqlClient' ADO.NET provider could not be loaded. Make sure the provider assembly is available to the running application. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.. 
[03:59:11] 
[IntegrationTests.CrudTest+QuestionTest.Create]  at System.Data.Entity.Config.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName) 
    at System.Data.Entity.Config.ProviderServicesFactory.GetInstanceByConvention(String providerInvariantName) 
    at System.Data.Entity.Config.DefaultProviderServicesResolver.GetService(Type type, Object key) 
    at System.Data.Entity.Config.CachingDependencyResolver.<>c__DisplayClass1.<GetService>b__0(Tuple`2 k) 
    at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) 
    at System.Data.Entity.Config.CachingDependencyResolver.GetService(Type type, Object key) 
    at System.Data.Entity.Config.ResolverChain.<>c__DisplayClass3.<GetService>b__0(IDbDependencyResolver r) 
    at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext() 
    at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate) 
    at System.Data.Entity.Config.ResolverChain.GetService(Type type, Object key) 
    at System.Data.Entity.Config.RootDependencyResolver.GetService(Type type, Object key) 
    at System.Data.Entity.Config.ResolverChain.<>c__DisplayClass3.<GetService>b__0(IDbDependencyResolver r) 
    at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext() 
    at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate) 
    at System.Data.Entity.Config.ResolverChain.GetService(Type type, Object key) 
    at System.Data.Entity.Config.CompositeResolver`2.GetService(Type type, Object key) 
    at System.Data.Entity.Config.IDbDependencyResolverExtensions.GetService[T](IDbDependencyResolver resolver, Object key) 
    at System.Data.Entity.Config.InternalConfiguration.GetService[TService](Object key) 
    at System.Data.Entity.Config.DbConfiguration.GetService[TService](Object key) 
    at System.Data.Entity.Utilities.DbProviderFactoryExtensions.GetProviderServices(DbProviderFactory factory) 
    at System.Data.Entity.Infrastructure.DefaultManifestTokenService.GetProviderManifestToken(DbConnection connection) 
    at System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest) 
    at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) 
    at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) 
    at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) 
    at System.Data.Entity.Internal.LazyInternalContext.InitializeContext() 
    at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) 
    at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() 
    at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() 
    at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) 
    at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity) 
    at System.Data.Entity.DbSet`1.Add(TEntity entity) 
    at EFRepository.Infrastructure.EFRepository`1.Add(T item) in c:\TeamCity\buildAgent\work\da2ea4e72c0e77f0\Repository\Infrastructure\EFRepository.cs:line 22 
    at IntegrationTests.CrudTest.Initialize() in c:\TeamCity\buildAgent\work\da2ea4e72c0e77f0\IntegrationTests\CrudTest.cs:line 34 
+1

Разместил EntityFramework.SqlServer.dll вместе с EntityFramework.dll? В EF6 поставщики SqlServer и SqlServerCE не находятся в той же сборке, что и механизм EF, как это было в предыдущих версиях. Не следует добавлять ссылку на файл System.Data.Entity.dll. Модель провайдера в EF6 изменилась по сравнению с провайдером EF5 и EF5, который просто не работает. Кроме того, вы можете столкнуться с несколькими сложными проблемами (например, геопространственными типами EF5, рассматриваемыми как типы объектов в EF6). 27 дек. 122012-12-27 07:31:47

  0

Да. Я проверил дважды, нет ссылки на System.Data.Entity и ссылки на EntityFramework.dll и EntityFramework.SqlServer. dll. Опять же, компиляции projetc и тесты запускаются в VS. Только когда я тестирую TeamCity, ошибка возникает. 27 дек. 122012-12-27 07:47:16

  0

Это правильная настройка. Я не использовал TeamCity, но мне кажется, что когда ваше приложение развернуто для запуска тестов с TeamCity, отсутствует EntityFramework.SqlServer.dll и, следовательно, исключение. 27 дек. 122012-12-27 07:49:10

  0

Я удалил bin из моего gitignorelist .. он по-прежнему бросает ту же ошибку .. любые идеи, где он пытается искать DLL? 27 дек. 122012-12-27 08:08:46

  0

Вот как среда выполнения находит сборки - http://msdn.microsoft.com/en-us/library/yx7xezcf.aspx. Я бы просто начал искать в той же папке, где ваше приложение и EntityFramework.dll на сервере TeamCity. 27 дек. 122012-12-27 08:44:29

  0

@Pawel см. Мое обновление 27 дек. 122012-12-27 10:17:43

  0

@Pawel Я разместил код здесь https://github.com/ashutoshraina/Pariksha .. вы можете увидеть, можете ли вы найти проблему. Путь к тесту выглядит нормально, так как TeamCity правильно подбирает его. 27 дек. 122012-12-27 13:46:01

  0

Я не заметил ничего плохого в вашем проекте. Можете ли вы поделиться трассировкой стека? Интересно, где звонок возник из ... 28 дек. 122012-12-28 00:55:50

  0

Было ли это когда-либо разрешено? 10 янв. 132013-01-10 22:23:40

  0

Нет, это не было разрешено. Пробовал всевозможные вещи. Но найти решение. 11 янв. 132013-01-11 07:45:56

  0

см. Ответ с этого поста: http://stackoverflow.com/questions/21175713/no-entity-framework-provider-found-for-the-ado-net-provider-with-invariant-name Я добавил 'private volatile Тип _dependency ... 'Ответ и это сработало! Это просто воняет, что я должен добавить отдельный класс, как это, чтобы получить EF для работы в TeamCity. 19 май. 162016-05-19 15:47:38

+2

Я удалил EntityFramework из пакетов nuget и установил снова, и он был исправлен 17 ноя. 162016-11-17 10:31:18

342

Такая же проблема, но я установил EF 6 через Nuget. EntityFramework.SqlServer отсутствовал для другого исполняемого файла. Я просто добавил пакет nuget к этому проекту.

+95

Я тоже это заметил. Если вы создадите библиотеку, использующую EF, VS поместит EF.dll и EF.SqlServer.dll в эту папку сборки. Но если теперь у вас есть другая программа, использующая вашу библиотеку, в эту сборку будет помещен только файл EF.dll. EF.SqlServer.dll отсутствует. Если вы добавите его вручную в папку сборки, программа будет работать. Нехорошее решение само по себе, но показывает, что проблема с отсутствием EF.SQLServer.dll является причиной ошибки. 25 окт. 132013-10-25 17:21:09

+35

Я добавил var x = typeof (System.Data.Entity.SqlServer.SqlProviderServices); Тогда мое приложение работало 19 дек. 132013-12-19 20:03:15

+24

Я всегда волнуюсь, когда набираю код, который абсолютно ничего не делает, и всякий раз, когда мой проект запускается. O_o 14 апр. 142014-04-14 20:07:36

+7

Кроме того, из-за оптимизации компилятора вы можете также использовать 'x.ToString()' или он выведет 'typeof' в Release. 15 апр. 142014-04-15 13:07:35

+15

Мне кажется, что EF 6.1 теперь нуждается в EF, установленном на моем ASPX DLL/Project, тогда как EF 5.0 только нуждался в нем для DLL/Project на уровне данных. 24 апр. 142014-04-24 06:27:39

+1

Закончилось просто добавление EntityFramework.SqlServer.dll вручную к проекту из папки пакетов. 02 июн. 142014-06-02 14:32:11

+3

Вы просто не хотите, чтобы все ваши проекты имели EF в качестве ссылки, так как Datalayer вашего приложения должен решить проблему. Решение Robert Muehsig решает ошибку в EF. Я поместил его код в файл DBcontext. Даже иногда даже невозможно включить все проекты с EF, потому что вы не строите все проекты, которые вызывают datalayer. 10 мар. 152015-03-10 10:50:57

+4

Я искал в Nuget для «EntityFramework.SqlServer» и результатов нет. Где пакет? Не указан в установленном списке 14 июл. 152015-07-14 16:40:15

  0

. Кстати, GC.KeepAlive - лучшее решение для «Мне нужно что-то ссылаться», чем случайные переменные, а ToStrings 12 ноя. 152015-11-12 18:17:08

  0

Я не могу загрузить EntityFramework.SqlServer.dll, даже если он есть в каталоге bin (без я копировал его в это место) 07 июн. 162016-06-07 12:12:59

  0

Мне нужно было удалить EF, а затем добавить его для этого. 01 сен. 162016-09-01 16:15:43

  0

Если кто-то столкнется с проблемой после удаления ссылки EntityFramework.SqlServer из вашего проекта, просто добавьте ее обратно. Он должен быть расположен в * YourSolutionDir \ packages \ EntityFramework.6.0.0 \ lib \ net45 \ EntityFramework.SqlServer.dll *. Но .. Мне просто интересно, почему это необходимо для EntityFramework, даже если мы не используем SqlServer. 07 сен. 162016-09-07 05:08:02

  0

Вы можете дополнительно добавить '[DeploymentItem (" EntityFramework.SqlServer.dll ")]' и '[DeploymentItem (" EntityFramework.dll ")]' в качестве атрибутов вашего модульного тестового класса, если файл по-прежнему не копируется после добавления его в качестве ссылки. 30 сен. 162016-09-30 20:53:09


4

Я, наконец, решил это. Оказывается, у меня была ошибочная реализация IDIsposable в моем классе репозитория. Я это исправил. Ошибочная реализация вызвала исключение stackoverflow, так как я не выбрал ненужные ресурсы. Это привело к тому, что VS не запускал тесты, и механизм выполнения теста разбился.

Я подал его с Microsoft здесь (это было до того, как я получил правильное решение). connect.microsoft.com/VisualStudio/feedback/details/775868/vs-test-execution-crashes-in-vs-2012#details

Во всяком случае, сборки теперь отлично работают на teamcity. Хотя, мне все еще интересно, почему ни один из механизмов тестирования VS Test не имел изящного способа сказать мне, что происходит, а не Team City.

Я обнаружил причину, вызванную вручную, отлаживая тест (который я понял только через несколько дней, исправление заняло у меня 5 секунд).

Надеюсь, это поможет кому-то, кто сталкивается с такими проблемами.


231

У меня была такая же проблема в моих тестовых проектах - я установил последние биты Ef6 через NuGet и каждый раз, когда я призываю что-то EF-связанной я получил:

The Entity Framework тип поставщика «System.Data. Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer 'для поставщика System.Data.SqlClient' ADO.NET не удалось загрузить. Убедитесь, что узел поставщика равен , доступному для запущенного приложения. См. http://go.microsoft.com/fwlink/?LinkId=260882 для получения дополнительной информации.

Моего обходной путь: Я поместил этот метод в моем тестовом проекте:

public void FixEfProviderServicesProblem() 
{ 
//The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' 
//for the 'System.Data.SqlClient' ADO.NET provider could not be loaded. 
//Make sure the provider assembly is available to the running application. 
//See http://go.microsoft.com/fwlink/?LinkId=260882 for more information. 

var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance; 
} 

Этот метод никогда не был назван, но я думаю, что компилятор удалит всю «ненужную» сборку и без использования EntityFramework. SqlServer ничего не дает.

Любом: Работает на моей машине;)

Примечание: Instead of adding the method to test project you can ensure a static reference to SqlProviderServices from your Model/entity project.

+24

Я закончил тем же. Я хотел бы поговорить с тем человеком, который сделал эту сборку зависимой от открытия связи с db. В своей альтернативной юниверсе все наши проекты с интерфейсом, имеющие конфигурационный файл с строкой соединения, должны ссылаться на EntityFramework только для того, чтобы получить эту DLL, чтобы открыть соединение. Каким образом это имеет смысл, я не понимаю. 21 окт. 132013-10-21 10:19:37

+3

MAGIC! Но он работает для моего проекта Integration Test. Благодарю. 05 ноя. 132013-11-05 15:37:37

+3

Это взлом, но это лучшее/простое решение, которое я нашел для сценария, в котором у вас нет пакета развертывания, созданного для вашего проекта. 06 дек. 132013-12-06 22:05:52

+2

Для всех вас используются другие предложения, такие как «var x = typeof (SqlProviderServices);». Только это решение, предоставленное Робертом, работает над разработкой и построением машин !!! 08 фев. 142014-02-08 13:38:46

+1

Спасибо, Роберт, это смешно, команда EF, но все равно это работает для меня. 19 авг. 142014-08-19 11:52:26

+1

Это работает для меня too..Here как мой entityFramework узел выглядит в конфигурации <entityFramework> <defaultConnectionFactory тип = "System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <поставщик invariantName = "System .Data.SqlClient»Тип = "System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/> </providers> </ entityFramework> 23 авг. 142014-08-23 00:21:29

+6

чтобы было ясно: Добавление выше код для вашего класса' DbContext' решит проблему в EF 6.1. Таким образом, вам не нужно включать пакет Entity Framework Nuget в проект front-end (WebApi и т. Д.) И может оставить все связанные с EF в вашем уровне данных. 11 ноя. 152015-11-11 21:34:24

  0

Дайте этому человеку колокольчики !!! 01 апр. 162016-04-01 12:29:52

  0

Где я могу разместить этот код? 07 июн. 162016-06-07 12:14:21

  0

@ AndersLindén. Вы должны поместить ссылку в код в проект ваших данных/сущности. См. Http://stackoverflow.com/a/29743758/52277 07 июн. 162016-06-07 14:12:50

  0

Я не могу поверить, что сработало! Благодаря! 01 дек. 162016-12-01 03:35:42

  0

Я был в восторге от этого, но он спас мне день, спасибо .. так много спасибо 08 мар. 182018-03-08 20:26:16


17

Я использовал регистрацию на основе кода для провайдера. link1 link2

Просто создали класс конфигурации, как

class DbContextConfiguration : DbConfiguration 
{ 
    public DbContextConfiguration() 
    { 
     this.SetDatabaseInitializer(new DropCreateDatabaseAlways<MyDbContext>()); 
     this.SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance); 
    } 
} 

Ключевой момент является this.SetProviderServices (SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);

и использовали его в таком способе

[DbConfigurationType(typeof(DbContextConfiguration))] 
public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
    { 
     ... 
    } 

    public DbSet<...> ...{ get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     ... 
    } 
} 
  0

У меня есть два проекта в одном решении. Первая - это библиотека классов с сборкой фреймворка сущности, класс DbContext и tt-файлы. Второй проект - это формы окон, которые должны получать данные с помощью ef-проекта. @Nash: Не могли бы вы уточнить, где (в какой проект) вы разместили свой класс 'DbContextConfiguration'? Спасибо 16 дек. 132013-12-16 10:10:43

  0

Как упоминалось выше, кажется, что дополнительные ссылки - это один из способов исправить это (см. Комментарий от eric). Я использовал консоль nuget и произвел эту команду: «Get-Project MyWinformsProject» Install-Package EntityFramework', который исправил его для меня. Еще я хотел бы лучше понять причину. 16 дек. 132013-12-16 10:19:51

  0

DbContextConfiguration, похоже, уже присутствует (с 2013 года), добавив, что строка DbConfiguraton над моим классом MyDbContext не решила проблему для меня. 07 июн. 162016-06-07 12:31:25

  0

Вам не нужен класс _DbConfiguration_. Поместите следующий код при запуске приложения (до использования EF): 'DbConfiguration.Loaded + = (sender, e) => e.ReplaceService <DbProviderServices> ((s, k) => System.Data.Entity.SqlServer. SqlProviderServices.Instance); '. 01 мар. 172017-03-01 22:03:07


87

NuGet настроит Ef6 проект для ссылки EntityFramework.SqlServer.dll. Это развертывается в выходной папке для вашего проекта EF6 во время сборки, но не будет развертываться в выходной папке для проектов, ссылающихся на ваш проект EF6. Я считаю, что это потому, что Visual Studio достаточно «умна», чтобы обнаружить, что ничто в вашей сборке фактически не использует DLL и поэтому не включает ее. Вы можете заставить EntityFramework.SqlServer.dll развертываться в выходной папке проектов, ссылающихся на ваш проект EF6 (модульные тесты, пользовательский интерфейс и т. Д.), Добавив код в ваш проект EF6, который использует EntityFramework.SqlServer.dll. Будьте осторожны, чтобы не поместить код в сгенерированный класс, поскольку вы рискуете потерять его на следующем регенере. Я решил добавить в сборку следующий класс, который устранил проблему.

using System.Data.Entity.SqlServer; 

internal static class MissingDllHack 
{ 
    // Must reference a type in EntityFramework.SqlServer.dll so that this dll will be 
    // included in the output folder of referencing projects without requiring a direct 
    // dependency on Entity Framework. See http://stackoverflow.com/a/22315164/1141360. 
    private static SqlProviderServices instance = SqlProviderServices.Instance; 
} 
+1

Это решило проблему для меня в отношении MSTest. Мне нравится этот метод, потому что он не требует, чтобы я делал что-то грязное с наследованием класса на моих тестовых классах. Просто включите класс где-нибудь в тестовую сборку и MAGIC. Благодаря! 09 фев. 152015-02-09 15:21:18

  0

Именно поэтому он не копирует sqlserver.dll для вывода ссылок на проекты. Это происходит, когда у вас есть еще один слой между исполняемым приложением и сборкой контекста. Спасибо, это решило мою проблему. 29 авг. 152015-08-29 21:55:31

+2

Для тех, кто не хочет тратить 4 секунды на поиск: using System.Data.Entity.SqlServer; 02 дек. 152015-12-02 21:25:43

  0

Мы используем общий базовый класс для модульных тестов, все модульные тесты наследуются от этого класса. Добавление этого метода к этому одному классу означает, что все проекты с единичным тестовым классом, наследующим базовый класс, работают нормально. 10 дек. 152015-12-10 10:52:22

+3

Небольшая точка, но, вероятно, лучше всего добавить комментарий к этому классу, чтобы объяснить, почему это необходимо. 04 мар. 162016-03-04 12:32:36

  0

@ JD41 Согласен. Включение ссылки «share» для этого ответа с текстом «Для получения дополнительной информации» может быть достаточно, но подробное объяснение нескольких предложений будет очень вежливым для будущего здравомыслия. 20 июл. 162016-07-20 18:43:13


0

У меня было такое же сообщение об ошибке.

У меня есть отдельный проект для доступа к данным. Запуск веб-проекта (который ссылался на проект данных) локально работал просто отлично. Но когда я развернул веб-проект для оформления сборки: EntityFramework.SqlServer не был скопирован. Я просто добавил ссылку на веб-проект и перераспределен, теперь он работает.

надеюсь, что это помогает другим


4

я вижу подобную проблему, и используя метод из этого поста: (http://entityframework.codeplex.com/workitem/1590), который решает мою проблему.

Чтобы обойти проблему, вы можете сделать свою тестовую сборку напрямую ссылкой на сборку поставщика, добавив некоторую строку, подобную этой, в любом месте тестовой сборки: var _ = System.Data.Entity.SqlServer.SqlProviderServices.Пример;


0

Я работал над учебным пособием Университета Contoso в автономном режиме и столкнулся с той же проблемой при попытке создать свой первый контроллер с использованием EF. Мне пришлось использовать консоль диспетчера пакетов для загрузки EF из кеша nuget и создать строку подключения к моему локальному экземпляру SQL Server, моя точка здесь - моя настройка webConfig для EF не может быть установлена ​​так, как вы все там, но я был в состоянии решить мою проблему, полностью удалив раздел «Поставщиков» в «entityFramework»

Роберт


13

Я разобрался с [DeploymentItem] на моей сборке классе INITIALIZING

namespace MyTests 
{ 
    /// <summary> 
    /// Summary description for AssemblyTestInit 
    /// </summary> 
    [TestClass] 
    [DeploymentItem("EntityFramework.SqlServer.dll")] 
    public class AssemblyTestInit 
    { 
     public AssemblyTestInit() 
     { 
     } 

     private TestContext testContextInstance; 

     public TestContext TestContext 
     { 
      get 
      { 
       return testContextInstance; 
      } 
      set 
      { 
       testContextInstance = value; 
      } 
     } 

     [AssemblyInitialize()] 
     public static void DbContextInitialize(TestContext testContext) 
     { 
      Database.SetInitializer<TestContext>(new TestContextInitializer()); 
     } 
    } 
} 

0

Существует простой исправить. откройте ссылки в своем проекте, щелкните правой кнопкой мыши «System.Data» -> свойства. Измените «Скопировать местный» на «True».

Проблема должна быть исправлена.

  0

Это не работает. 03 мар. 162016-03-03 16:04:29

  0

Не работает для меня. 07 июн. 162016-06-07 12:43:07


3

Когда я осмотрел проблему, я заметил, что в выходной папке отсутствовали следующие DLL. Простым решением является копирование Entityframework.dll и Entityframework.sqlserver.dll с приложением app.config в выходную папку, если приложение находится в режиме отладки. В то же время измените параметр опции «Скопировать в папку вывода» app.config для копирования всегда. Это решит вашу проблему.

+1

Я установил «Копировать локальную» только для «EntityFramework.SqlServer». Теперь это работает. 17 апр. 152015-04-17 07:09:30


36

Мое решение было удалить рамки сущности из проекта через менеджера NuGet и добавить его обратно.

+3

'PM> Update-Package -Reinstall« EntityFramework »-ProjectName« MyProj1 »' 12 июн. 162016-06-12 10:10:58

  0

Это сработало для меня, и я думаю, что это может быть оптимальное решение 02 мар. 172017-03-02 08:53:45

  0

Это решение не сработало для меня ... 07 апр. 172017-04-07 08:01:57

  0

Простой, чистый решение, которое работает. Должно быть намного больше в списке 10 янв. 182018-01-10 09:41:54


5

У меня есть проблема, потому что я не добавить ссылку на EntityFramework.sqlServer.dll. Когда я разрабатываю программу, она работает. Но когда я публикую приложение и устанавливаю его, он выдает ошибку.

Я просто добавляю ссылку, строю и публикую снова.

References


0

В моем случае я решил проблему, установив 2012 Developer Edition, когда я уже установлен SQL Server Express 2012 (x64) SQL Server. Кажется, это обеспечило мне недостающую зависимость.


0

Добавление Entityframework.dll и Entityframework.sqlserver.dll к эталонному проекту решило проблему.


1

Я проверил окно вывода отладки в проекте тестирования модуля. EntityFramework.SqlServer.dll не был загружен. После добавления его в папку bin тесты были успешно запущены.


21

Я решил эту проблему, добавив, используя stament на верхней части моего класса DbContext, вот так:.

using SqlProviderServices= System.Data.Entity.SqlServer.SqlProviderServices; 
+1

Это самое чистое решение этой проблемы. Спасибо. 19 апр. 162016-04-19 14:06:06

  0

Это решение работает и выглядит чистым. Вопрос: не потеряем ли идентификатор строки класс DBContext обновлен? т. е. с использованием поколения класса edmx? 05 май. 162016-05-05 10:30:10

  0

Не могу поверить, что это было необходимо и как-то не исправлено Microsoft, но это сработало для меня. Спасибо за простое решение. 22 сен. 162016-09-22 10:25:40

  0

Это решение функционально такое же, как [MissingDllHack] (http://stackoverflow.com/a/22315164/1141360). Это может показаться более чистым, но вводит обходной код в ваш контекстный класс. Этот код также будет помечен для удаления с помощью таких инструментов, как ReSharper, и может быть легко потерян с течением времени. Хорошее решение, но я предпочитаю, чтобы обходной путь был отделен от контекста таким образом, чтобы он не вызывал предупреждения кода. 11 окт. 162016-10-11 14:30:07


0

удалить рамки сущности из проекта через NuGet затем добавить его обратно в


0

В моей case dll не был скопирован, хотя я добавил ссылку на него. Это связано с тем, что EntityFramework.SqlServer.dll не копируется в ваш проект. Добавьте эту dll, и она, надеюсь, будет работать. Вы можете найти это из проекта, где вы добавили datamodel.


0

Дополнительная информация ко всем полезным предложениям здесь, если вы используете EF 6.1.3, убедитесь, что версия вашего проекта .net версии 4.5 или более.


4

Я решил это, вручную скопировав EntityFramework.SqlServer.dll файл в bin folder основного приложения.

  0

У меня его уже есть ... не работает ... 07 июн. 162016-06-07 12:39:12


2

Просто ссылка или браузер с EF DLL - EntityFramework.SqlServer.dll


2

Я не хочу ссылку на EF в моем проекте приложения (или вручную скопировать что-нибудь), так что я добавил это к моему EF проекта Post -строения:


5

Поздно к вечеринке, но высшие голосовые ответы все мне кажутся хаками.

Все, что я сделал, это удалить следующее из моего app.config в тестовом проекте. Работал.

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="mssqllocaldb" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 

0

Проблема в моем случае заключалась в том, что для того, чтобы поймать другое исключение, я включил исключения CLR (Common Language runtime). И я забыл отключить его.

Я отключил его в настройке исключения. и он упустил это исключение и продолжил работать и создал db для меня (в моем случае) автоматически.


2

Это происходит только в моих проектах нагрузочных/модульных испытаний. Разочаровавшись, я знал, что это произошло в проекте, в котором я работал 2 года. Должно быть, был какой-то порядок тестирования, который ломает ситуацию. Думаю, когда-то это удалит его.

Я обнаружил, что просто объявление переменной, использующей правильное значение, устраняет проблему ... Я даже не вызываю метод. Просто определите это. Странно, но он работает.

/// <summary> 
    /// So that the test runner copies dlls not directly referenced by the integration project 
    /// </summary> 
    private void referenceLibs() 
    { 
     var useless = SqlProviderServices.Instance; 
    } 

0

Убедитесь EntityFramework.dll, EntityFramework.SqlServer.dll и длл вашего провайдера (для SQL Server Compact, которая будет EntityFramework.SqlServerCompact.dll) в развернутой папке приложения. Это особенно важно для развернутого приложения.


0

Я также имел подобную проблему

Моя проблема была решена, выполнив следующие действия:

enter image description here

enter image description here


0

я столкнулся с точно такой же проблемой на моем CI сервере сборки (работает Bamboo), который не устанавливает на нем Visual Studio IDE.

Без изменения кода для процесса сборки/тестирования (который, как я считаю, не является хорошим решением), лучше всего скопировать EntityFramework.SqlServer.dll и вставить его в C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE. (где работает ваш mestest)

Проблема решена!


0

У меня была та же проблема с экземпляром объекта DBContext объекта из единого тестового проекта. Я проверил пакеты модулей для тестирования модулей, и я понял, что пакет EntityFramework не был установлен, я установил его из Nuget и решил проблему (я думаю, что это ошибка EF).

счастливым кодирования


0

я была такой же isssue я пытался много раз, но это не решить, но когда я установить пакет EntityFramework.SqlServerCompact он решается установить этот пакет из пакета менеджера NuGet.

Install-Package EntityFramework.SqlServerCompact 

0

После попытки всех других предложенных решений и не получать мой проект работать, я наконец-то нашел немного комментария в this page:

Удаления БИН-папка сделала это для меня

И это сработало и для меня.

Теперь я не могу сказать, нужно ли просто удалять папку с bin, и она уже будет работать, или если вам сначала нужно будет сделать то, что предложили другие разработчики, но дело в том, что я получил ее работая после удаления папки bin, и это после 3 или более часов поиска и tryinig других решений. Так что, возможно, это сработает и для вас.