Требуемая версия net framework не содержит сборок времени выполнения платформы entity framework
1.такая проблема. EF последняя версия. Visual Studio. Создал простую базу данных. Создал модель. Создал таблицу. Через код добавляю в таблицу данные. Одну строчку он добавляет. Но вот как впишу еще одну например с названием "bu2" то уже ошибка на моменте db.SaveChanges();
System.Data.Entity.Infrastructure.DbUpdateException: "При обновлении записей возникла ошибка. Дополнительные сведения приведены во внутреннем исключении."
SqlException: Violation of PRIMARY KEY constraint 'PK__Buffet__3214EC070BE69470'. Cannot insert duplicate key in object 'dbo.Buffet'. The duplicate key value is (0). The statement has been terminated.
2.Даже когда на одной строке срабатывает, я открываю таблицу, там нету записанных данных, получается что база данных ничего не записывает?
3.Почему в db. я уже нахожу свою таблицу во множественном числе с буквой s на конце?
Вот так решается проблема, не хочет автоматом Id прописывать, но второй вопрос остается все еще открытым.
покажите как у вас объявлен Buffet.
PashaPash Если вы вот это имеете ввиду, то вот так:
Автоматом при создание модели генерирует.
что проверяете именно в той базе?
Захожу в таблицу Buffet, а там всюду null, после отладки не сохраняются данные.
как именно у вас база подключена?
Она подключена обычно:) не знаю как точно ответить. Создал простую базу в VS, создал модель. На ней зеленая розетка, но при запуске отладки загорается крестик красные, может она просто отключается на отладку. Нашел тут на форму ответ, что нужно поставить if newer в свойствах базы данных. Я та понял это в свойствах базы данных, у меня рус. версия. Как я понял это связано с "Копировать в выходной каталог", но переключая там на разные вкладки снова ошибка на SaveChages().
47k 11 11 золотых знаков 74 74 серебряных знака 143 143 бронзовых знакаПроблема с дублирующимся первичным ключом возникает когда, сюрприз, первичный ключ дублируется. Вы значение ключа не указали, там лежит ноль - вот EF и пытается вставить этот ноль в таблицу три раза.
Вообще говоря, такое поведение по умолчанию - странное. Потому что EF умеет использовать автоинкрементные ключи, и свойство Id по умолчанию становится именно таковым.
Есть несколько предположений почему так может происходить.
Наиболее вероятно, что вы используете подход Database First, то есть вы сгенерировали модель по готовой базе данных. И в этой базе данных атрибут Id не был объявлен автоинкрементным (в терминах MS SQL Server - Identity). Сделайте его автоинкрементным и обновите модель.
За создание автоинкрементных полей в EF отвечает соглашение StoreGeneratedIdentityKeyConvention . Но оно работает только с типами Int16, Int32 и Int64 (они же - short, int и long). Возможно, ваше свойство Id имеет какой-то другой тип данных. В таком случае исправьте его на long и все заработает.
Также возможно, что EF по какой-то причине не использует соглашение StoreGeneratedIdentityKeyConvention. Это возможно если оно было явно удалено из списка используемых соглашений на этапе построения модели. Проверьте, нет ли у вас в классе контекста метода OnModelCreating с непонятными строчками.
Также на всякий случай привожу полный список условий, которые должны быть выполнены для того чтобы первичный ключ автоматически стал автоинкрементным:
- Сущность должна быть корнем иерархии (не должно быть базового класса, отображенного на БД).
- Эта иерархия не может быть типа TPC (Table per Concrete class)
- Первичный ключ должен состоять равно из одного свойства
- Это свойство должно быть типа Int16, Int32 или Int64
- У сущности не может быть других автоинкрементных свойств
- У ключевого свойства не должен быть явно указан никакой StoreGeneratedPattern
- Сущность не может разделять одну и ту же таблицу с другой сущностью
Существует возможность принудительно сделать свойство автоинкрементным ключом. Для этого надо использовать атрибут DatabaseGeneratedAttribute :
Тем не менее, условия из списка выше взялись не просто так, и лучше добиться их выполнения чем вот так давить силой - иначе могут "полезть" уже другие ошибки.
Модуль PowerShell 2.0.
Подраздел NET Framework Setup в пути реестра не начинается с точки.
Минимальная версия
Использование редактора реестра
В меню Пуск выберите Выполнить, введите regedit и нажмите кнопку ОК.
(Для запуска программы regedit необходимы учетные данные администратора.)
<a name="use-powershell-to-check-for-a-minimum-version">Использование PowerShell для проверки минимальной версии
Используйте команды PowerShell для проверки значения параметра Release в подразделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full.
Отправка запросов в реестр с помощью кода
Используйте методы RegistryKey.OpenBaseKey и RegistryKey.OpenSubKey для доступа к подразделу HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full в реестре Windows.
Добавьте директиву using Microsoft.Win32 или Imports Microsoft.Win32 в начало файла кода, если вы еще этого не сделали.
Этот пример выводит данные, подобные следующим:
В этом примере применяются рекомендации для проверки версии:
- Проверяется, имеет ли параметр Release значение, большее или равное значению известных разделов выпуска.
- Проверка выполняется с самой последней до самой ранней версии.
Подраздел NET Framework Setup в пути реестра не начинается с точки.
Использование редактора реестра (более ранние версии платформы)
В меню Пуск выберите Выполнить, введите regedit и нажмите кнопку ОК.
Для запуска программы regedit необходимы учетные данные администратора.
Запрос реестра с помощью кода (более ранние версии платформы)
Используйте класс Microsoft.Win32.RegistryKey для доступа к подразделу HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP в реестре Windows.
В этом примере отобразятся выходные данные, аналогичные следующим:
Поиск версий CLR
Инструмент Clrver.exe
Для определения версий среды CLR, установленных на компьютере, можно использовать средство CLR Version (Clrver.exe). Откройте Командную строку разработчика или PowerShell для разработчиков в Visual Studio и введите clrver .
Пример результатов выполнения:
Класс Environment
Выполните запрос к свойству Environment.Version, чтобы получить объект Version.
Возвращенный объект System.Version указывает версию среды выполнения, в которой в настоящее время выполняется код. Он не содержит версий сборок или других версий среды выполнения, которые установлены на компьютере.
после загрузки EF6 по nuget и попробуйте запустить мой проект, он возвращает следующую ошибку:
Я только что попал в ту же проблему, и похоже, что EntityFramework, хотя установленный из диспетчера пакетов NuGet не был правильно установлен в проекте.
вы добавили EF в проект библиотеки классов. Вам также нужно добавить его в проект, который ссылается на него (ваше консольное приложение, веб-сайт или что-то еще).
вам не нужно устанавливать Entity Framework в консольное приложение, вам просто нужно добавить ссылку на сборку EntityFramework.От SQLServer.файл DLL. Эту сборку можно скопировать из проекта библиотеки классов, использующего Entity Framework, в папку LIB и добавить к ней ссылку.
- библиотеки классов приложения:
- Установить Entity Framework
- напишите код слоя данных
- app.конфиг файл имеет всю конфигурацию, связанную с Entity Framework, за исключением строки подключения.
- добавить ссылку на первый проект.
- добавить ссылку на EntityFramework.От SQLServer.файл DLL.
- app.config / web.config имеет строку подключения (помните, что имя записи конфигурации должно совпадать с именем класса DbContext.
надеюсь, это поможет.
похоже, это недавно добавленный файл в EF6. Первоначально я не включил его в свой модуль слияния и столкнулся с проблемой, указанной здесь.
при установке Entity Framework 6 через Nuget . И EntityFramework.SqlServer иногда пропускают для другого исполняемого файла. Просто добавьте Nuget пакет для этого проекта.
иногда выше не работает для тестового проекта
чтобы решить эту проблему в тестовом проекте, просто поместите этот метод внутри тестового проекта:
этот метод никогда не вызывался, но, как мои наблюдения, компилятор удалит все "ненужные" сборки и без использования EntityFramework.SqlServer материал тест терпит неудачу.
вместо добавления EntityFramework.SqlServer для размещения проекта вы можете обеспечить статическую ссылку на него из вашего проекта модели/сущности, как это
это заставит процесс сборки включить сборку с проектом хоста.
добавить эту функцию
к классу контекста базы данных в классе библиотеки и отсутствующей DLL EntityFramework.От SQLServer.dll будет скопирована в правильные места.
ни один из них не работал для меня. Я нашел решение в еще один вопрос stackoverflow. Я добавлю его здесь для удобства:
вам нужно сделать ссылку, поэтому она будет скопирована в приложении den путь. Потому что позже на него будут ссылаться во время выполнения. Так что вам не нужно скопировать любые файлы.
Я получил ту же ошибку при использовании Entity Framework 6 с SQL Server Compact 4.0. Статья на MSDN для Поставщики Entity Framework для EF6 было полезно. Запуск соответствующих команд поставщика в виде пакетов nuget в консоли диспетчера пакетов может решить проблему, а также пакеты NuGet автоматически добавят регистрации в файл конфигурации. Я побежал!--0--> для решения проблемы.
когда ошибка происходит в тестовых проектах, самое красивое решение-украсить тестовый класс:
сегодня столкнулся с этой проблемой при работе с набором веб-сервисов, каждый в разных проектах, и отдельный проект, содержащий комплексное тестирование некоторых из этих услуг.
Я использую эту настройку в течение некоторого времени с EF5, без необходимости включать ссылки на EF из проекта тестирования интеграции.
теперь, после обновления до EF6, кажется, мне нужно включить ссылку на EF6 в тестовый проект интеграции, хотя он там не используется (в значительной степени, как указано выше user3004275).
показания вы столкнулись с той же проблемой:
- вызовы непосредственно EF (подключение к БД, получение данных и т. д.) работают нормально, если они инициируются из проекта, который имеет ссылки на EF6.
- звонки в службу через опубликованный интерфейс сервиса работать нормально, т. е. нет отсутствующие ссылки "внутренне" в услуга.
- звонки непосредственно к публичным методам в проекте службы из проекта вне службы вызовет эту ошибку, даже если EF не используется в самом проекте; только внутренне в вызываемом проекте
третий момент-это то, что сбило меня с толку на некоторое время, и я все еще не уверен, почему это требуется. Добавление ссылки на EF6 в мой тестовый проект интеграции решило его в любом случае.
В своих попытках решить такую элементарную на первый взгляд задачу, как разработка минимального демонстрационного приложения WinForms с использованием EF Core в VisualStudo 2015 я натолкнулся на целый проблем типа исключений, неожиданного поведения, непонимания как сделать нечто, что в туториалах подразумевается как самоочевидное и т.п. В результате некоторые шаги из тех, что я приведу ниже пришлось нащупывать практически в слепую, гугля, задавая вопросы и экспериментируя.
3. Обновляем расширение Visual Studio для работы с репозиториями NuGet. Для этого либо скачиваем актуальную на данный момент версию 3.5.0.1996 по прямой ссылке либо добавляем в настройки Visual Studio соответствующий репозиторий расширений для автоматического обновления.
5. Нажимаем правой кнопкой мыши по нашему проекту в панели Solution Explorer, выбираем Manage NuGet Packages. переходим на вкладку Browse, устанавливаем Microsoft.EntityFrameworkCore.Sqlite.Design и Microsoft.EntityFrameworkCore.Tools. Для установки актуальных версий может потребоваться установить галочку «Include prerelease», в стабильных версиях может чего-то не хватать или наличествовать неисправленные баги. Я установил последние на данный момент Microsoft.EntityFrameworkCore.Sqlite.Design 1.1.0 и Microsoft.EntityFrameworkCore.Tools 1.1.0-preview4-final. Если возникнут проблемы с установкой Microsoft.EntityFrameworkCore.Tools можно попробовать сделать это через командную строку NuGet: в меню выбрать Tools — NuGet Package Manager — Package Manager Console, в появившейся консоли (которая, кстати, ещё понадобится нам далее) после приглашения «PM>» ввести «Install-Package Microsoft.EntityFrameworkCore.Tools -Pre»
6. Создаём файлы исходного кода классов модели данных. Для порядка я поместил их в подпапку «Model» (некоторые называют её «Entities», некоторые кидают все классы в корень проекта, а некоторые и вовсе в один файл). Модель описывает учебный пример базы данных, хранящей список городов и людей в/из них. Каждый человек может быть связан только с одним городом, может быть неизвестно из какого он города вообще.Vs2015WinFormsEfcSqliteCodeFirst20170304ExampleContext.cs
7. Разрешаем скрипты PowerShell, если этого не сделать может возникнуть ошибка ". \packages\Microsoft.EntityFrameworkCore.Tools.1.1.0-preview4-final\tools\init.ps1 cannot be loaded because running scripts is disabled on this system." Для этого переходим в командную строку NuGet (выбрать Tools — NuGet Package Manager — Package Manager Console в меню) и выполняем следующую команду
8. Создаём «миграции». Для этого, сохранив и откомпилировав наш код (просто чтобы удостовериться в отсутствии явных опечаток) переходим в командную строку NuGet и выполняем следующую команду.
в результате у нас в проекте должна появиться папка «Migrations» и два файла в ней: «Vs2015WinFormsEfcSqliteCodeFirst20170304ExampleContextModelSnapshot.cs» и «20170304204355_Vs2015WinFormsEfcSqliteCodeFirst20170304ExampleMigration.cs» (разумеется число в начале последнего у вас будет другое — это ни что иное, как дата и время в момент генерации в очевидном формате, я её потом вообще удалил оставив только «Vs2015WinFormsEfcSqliteCodeFirst20170304ExampleMigration.cs»).9. Редактируем сгенерированные файлы чтобы добавить условие уникальности (unique constraint, также известное как вторичный ключ) на имя города (в реальности, конечно, бывают города с одинаковыми именами, но для примера будет не лишним)
Vs2015WinFormsEfcSqliteCodeFirst20170304ExampleMigration.cs
Vs2015WinFormsEfcSqliteCodeFirst20170304ExampleContextModelSnapshot.cs
10. Генерируем файл БД. Для этого в командной строке NuGet выполняем следующую команду
Файл БД создастся в той же директории, где находится скомпилированный exe-шник нашего приложения, у меня это ". \Vs2015WinFormsEfcSqliteCodeFirst20170304Example\bin\Debug\Vs2015WinFormsEfcSqliteCodeFirst20170304Example.sqlite".На данном этапе мы уже можем заглянуть внутрь созданного файла, например с помощью официального консольного клиента sqlite3 или бесплатной кроссплатформенной GUI оболочки DB Browser for SQLite, и удостовериться, что таблицы создались корректно. Помимо наших таблиц «Cities» и «People» мы также найдём там таблицу «__EFMigrationsHistory» со служебной информацией EF Core и «sqlite_sequence» со служебной информацией SQLite.
11. Теперь перейдём к дизайнеру нашей формы, разместим на ней кнопочку, щёлкнем и на ней дважды чтобы создать обработчик события нажатия на кнопку и перейти к редактированию его кода. Ниже привожу свой код, демонстрирующий основные действия с записями БД. Я ещё имею привычку всегда переименовывать Form1 в MainForm и контролы аналогично по смыслу (в данном случае единственный контрол button1 в mainButton), но это дело вкуса и принятых в вашей команде стандартов именования.
Разумеется в реальной жизни вы реализуете в приложении более богатый интерфейс, более осмысленную логику, добавите обработку исключений и валидацию данных для их предотвращения, приведённого же примера достаточно для понимания того, как это сделать.Я пытаюсь создать модель данных объекта с Oracle. Я получаю эту ошибку.
Я установил их для своего решения.
Я также установил ODT для VS 2015.
Это мои ссылки, показывающие.
Чего мне не хватает?
Здесь приведены шаги разрешения:
Установите Oracle ODTwithODAC122010 как 32Bit
Создайте свой проект в VS2017
Измените Active Solution Platform на 32 бит из AnyCPU
Открыть Инструменты- > Nuget PackageManager- > Управление пакетами Nuget для решения
6- Откройте Tools- > Nuget PackageManager- > Консоль диспетчера пакетов
Примечание. Я не хочу, чтобы EF6.1.3 не работал с VS2017 и Oracle ODTwithODAC122010. Но после всего этого процесса я изменил EF как EF6.1.3, он работает
Но я не советую вам.Сегодня я столкнулся с этой проблемой. Затем я решил следующие шаги:
Обычно, если мы хотим использовать MySQL с Entity Framework, мы добавим некоторые DLL, такие как MySql.Data, MySql.Data.Entity.EF6.
Но мы забыли одну вещь, с которой Visual Studio должна работать с MySQL.
Добавление конфигураций в App.config/Web.config:
Затем создайте все свои проекты и повторите попытку.
Другое решение: с помощью Nuget для добавления MySQL dll. Он будет добавлен в файл App.config/Web.config
Сохраните все изменения, перестройте, добавьте модель данных сущности, и теперь она будет работать.
Это случалось с нами на нашей работе много раз!
Надеюсь, что это поможет
Установите Entity Framework, если он не установлен, перестройте проект и добавьте новое соединение. Это решает проблему для меня.
Мне удалось решить эту проблему, обновив Entity Framework до 6.1.3, Oracle Managed Data Access до 12.1.24160719 и Oracle Managed Data Entity Framework до 12.1.2400. Пожалуйста, используйте nuget manager для обновления. После этого он РАБОТАЕТ.
Мой компьютер:
Win 7 64 битЧто я пробовал до успеха:
-downgrade Oracle.ManagedDataAccess.EntityFramework и Oracle.ManagedDataAccess с 18.3.0 по 12.2.20190115
-Change Режим сборки с любого процессора на x86
установленный ODAC: ODTwithODAC122011.zip
В моем случае смысл состоял в том, чтобы добавить ссылки, тщательно сохраняя версию согласованной, и соответственно обновить файл конфигурации.
во-первых, перейдите и удалите модель, чтобы удалить обе ссылки на структуру сущностей.
После этого добавьте свою модель и запишите ее в консоли диспетчера пакетов:Читайте также: