Тип провайдера 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.