Тип провайдера Entity Framework не может быть загружен?


420

Я пытаюсь запустить свои тесты на 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 ... но, похоже, это тоже не работает.

Обновить

Мой 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>

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

[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)
Pawel

Да, я дважды проверил, нет ли ссылки на System.Data.Entity и присутствуют ли ссылки как на EntityFramework.dll, так и на EntityFramework.SqlServer.dll. Снова projetc компилируется и тесты запускаются в VS. Только когда я запускаю тесты на TeamCity, ошибка возникает.
Ашутош Райна

Это правильная настройка. Я не использовал TeamCity, но мне кажется, что при развертывании вашего приложения для запуска тестов с TeamCity отсутствует EntityFramework.SqlServer.dll и, следовательно, исключение.
Павел

1
см. ответ из этого поста: stackoverflow.com/questions/21175713/… Я добавил private volatile Type _dependency...ответ, и он работал! Просто воняет, что мне нужно добавить отдельный класс, как этот, чтобы заставить EF работать в TeamCity.
1916 года

2
Я удалил EntityFramework из пакетов nuget и установил снова, и это было исправлено
abhyudayasrinet

Ответы:


426

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


108
Я тоже это заметил. Если вы создаете библиотеку, которая использует EF, VS поместит EF.dll и EF.SqlServer.dll в эту папку сборки. Но если у вас есть другая программа, использующая вашу библиотеку, в эту папку сборки будет помещен только файл EF.dll. EF.SqlServer.dll отсутствует. Если вы добавите его вручную в папку сборки, программа будет работать. Само по себе не очень хорошее решение, но показывает, что причиной является ошибка EF.SQLServer.dll.
Эрик

44
Я добавил var x = typeof (System.Data.Entity.SqlServer.SqlProviderServices); Тогда мое приложение сработало
Брайан

33
Я всегда волнуюсь, когда набираю код, который абсолютно ничего не делает, и внезапно мой проект запускается. О_о
Иордания

10
Кроме того, из-за оптимизации компилятора вы можете захотеть сделать это, x.ToString()иначе она выйдет typeofв Release.
Иордания

15
Меня раздражает, что EF 6.1 теперь нужен EF, установленный в моей ASPX DLL / Project, тогда как EF 5.0 нужен только в моей DLL / Project уровня данных.
PeterX

274

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

Не удалось загрузить тип поставщика Entity Framework 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' для поставщика ADO.NET System.Data.SqlClient. Убедитесь, что сборка провайдера доступна для работающего приложения. См. 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 тест не пройден.

В любом случае: работает на моей машине;)

Примечание: вместо добавления метода для тестирования проекта вы можете обеспечить статическую ссылку на SqlProviderServices из вашего проекта Model / entity .


24
Я закончил тем же. Я хотел бы поговорить с тем человеком, который сделал эту сборку зависимой от открытия соединения с БД. В их альтернативном юниверсе все наши проекты внешнего интерфейса, имеющие файл конфигурации со строкой соединения, должны ссылаться на EntityFramework только для того, чтобы этот dll открывал соединение. Каким образом это имеет смысл, я не понимаю.
juhan_h

3
Это взлом, но это лучшее / простое решение, которое я нашел для сценария, в котором у вас нет пакета развертывания, созданного для вашего проекта.
Кон

3
Для всех вас используются другие предложения, такие как "var x = typeof (SqlProviderServices);". Только это решение, предоставленное Робертом, работает над разработкой и сборкой машин !!!
Александр Шмидт

3
Спасибо Роберту, это нелепо для команды EF, но в любом случае это работает для меня.
Hitesh

7
Для ясности: добавление вышеуказанного кода в ваш DbContextкласс решит проблему в EF 6.1. Таким образом, вам не нужно включать пакет Nuget Entity Framework в ваш интерфейсный проект (WebApi и т. Д.), И вы можете оставить все, что связано с EF, на вашем уровне данных.
Ник

106

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. Спасибо!
Кбримингтон

Именно по этой причине он не копирует sqlserver.dll в выходные данные ссылающихся проектов. Это происходит, когда у вас есть еще один слой между выполнением приложения и сборкой контекста. Спасибо, это решило мою проблему.
Бхарат

2
Для тех, кто не хочет тратить 4 секунды на его поиск: using System.Data.Entity.SqlServer;
TTT

Мы используем общий базовый класс для модульных тестов, все модульные тесты наследуются от этого класса. Добавление этого метода к этому одному классу означает, что все проекты с классом модульного теста, унаследованным от базового класса, работают нормально.
MaxJ

3
Небольшая точка, но, вероятно, лучше добавить комментарий к этому классу, чтобы объяснить, почему это необходимо.
Джон Дарвилл

43

Мое решение состояло в том, чтобы удалить платформу сущностей из проекта с помощью диспетчера nuget и добавить ее обратно.


9
PM> Update-Package -Reinstall "EntityFramework" -ProjectName "MyProj1"
VahidN

Это сработало для меня, и я думаю, что это может быть оптимальным решением
ccoutinho

Простое, чистое решение, которое работает. Должно быть намного выше в списке
mode777

29

Я решил это, добавив использование метки поверх моего класса DBContext, вот так:

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

1
Это самое чистое решение этой проблемы. Спасибо.
Александру Дику

Это решение работает и выглядит чисто. Вопрос: не потеряем ли мы идентификатор строки, обновляется ли класс DBContext? то есть с использованием генерации класса EDMX?
НолоМокгоси

Не могу поверить, что это было необходимо и каким-то образом не было исправлено Microsoft - но это сработало для меня. Спасибо за простое решение.
Царь Бомба

Это решение функционально такое же, как MissingDllHack . Это может показаться чище, но вводит обходной код в ваш контекстный класс. Этот код также будет помечен для удаления такими инструментами, как ReSharper, и со временем может быть легко потерян. Хорошее решение, но я предпочитаю держать обходной путь отдельно от контекста таким образом, чтобы не генерировать кодовые предупреждения.
Тимоти Шуновер

20

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

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

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

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

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

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

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

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

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

Как уже упоминалось выше, кажется, что дополнительные ссылки являются одним из способов исправить это (см. Комментарий от Эрика). Я использовал консоль nuget и запустил эту команду, Get-Project MyWinformsProject | Install-Package EntityFrameworkкоторая исправила это для меня. Тем не менее, я хотел бы лучше понять причину.
surfmuggle

DbContextConfiguration, казалось, уже присутствовал (против 2013 года), добавление строки DbConfiguraton над моим классом MyDbContext не решило проблему для меня.
Андерс Линден

Вам не нужен класс DbConfiguration . Вставьте следующий код при запуске приложения (перед использованием EF): DbConfiguration.Loaded += (sender, e) => e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);.
Росберг Линхарес

14

Я разобрался с [DeploymentItem] в моем классе инициализации сборки

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());
        }
    }
}

9

Опоздал на вечеринку, но ответы с самым высоким рейтингом показались мне взломами.

Все, что я сделал, это удалил следующее из моего 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>

Настоящее решение!
Бен Ф

8

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

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

Ссылки


Я сделал это, и это сработало. В основном, проект будет показывать предупреждение, когда компоненты в библиотеках не указаны должным образом.
кбвишну

5

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


4

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

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

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

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

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


4

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

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


3

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


2
Я установил «Копировать локальный» true только для «EntityFramework.SqlServer». Теперь это работает.
Алезис

3

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


Это то, что я сделал. Скопировал ссылку на «EntityFramework.SqlServer» из моей библиотеки в «работающий» проект. Это сработало!
Хокон К. Олафсен

3

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

Install-Package EntityFramework.SqlServerCompact

3

Я создал статический файл «запуска» и добавил код для принудительного копирования библиотеки DLL в папку bin в ней, чтобы отделить эту «конфигурацию».


[DbConfigurationType(typeof(DbContextConfiguration))] public static class Startup { }

public class DbContextConfiguration : DbConfiguration
{
    public DbContextConfiguration()
    {
        // This is needed to force the EntityFramework.SqlServer DLL to be copied to the bin folder
        SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
    }
}


1
Спасибо! Это была огромная помощь.
Аддисон Шухардт

1
Рад, что вы нашли мой ответ полезным @AddisonSchuhardt :)
hatsrumandcode

2

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

cp $(TargetDir)EntityFramework.SqlServer.dll $(SolutionDir){your-main-bin-folder}

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;
    }

2

Попробовав все предложенные решения и не заставив мой проект работать, я наконец нашел небольшой комментарий на этой странице :

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

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


1
Я объединял две ветви - в моем проекте не было изменений, связанных с EF, но мои юнит-тесты просто начали проваливаться без причины. Удаление папки BIN заставило их снова работать.
Арно Петерс

@ Zeek2 эта ошибка хитрая. На странице, которую я цитирую, есть много разных предложений по решению этой проблемы. Это только одно из многих возможных решений. Продолжайте исследовать его, пока не найдете решение, которое будет относиться к вашей конкретной проблеме, и удачи.
Улисс Алвес

1

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


1

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


1

У меня тоже была похожая проблема

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

введите описание изображения здесь

введите описание изображения здесь


1

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

счастливое кодирование


0

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

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

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


0

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

Роберт


0

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

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


0

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


0

удалите структуру сущностей из проекта через Nuget, а затем добавьте ее обратно.


0

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


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.