Подтвердить что ты не робот

Сначала база данных создает модель сущности framework 6.1.1, используя system.data.sqlite 1.0.93

У меня есть проект, который я только что обновил с помощью nuget. Эта обновленная структура сущностей от 6.1 до 6.1.1, и она обновила sqlite до 1.0.93. Я хотел обновить свою модель из моей последней базы данных. Я сделал шаги 1) Модель из базы данных 2) Выберите базу данных sqlite 3) Создать

После генерации я получил следующее сообщение об ошибке, показанное ниже. У меня установлены компоненты времени разработки 1.0.93. Кто-нибудь знает, что именно вызывает эту ошибку. Ссылки и версии проекта соответствуют версиям, показанным выше.

Сообщение об ошибке:

Ваш проект ссылается на последнюю Entity Framework; однако и поставщик базы данных Entity Framework совместимый с этой версией, не удалось найти для вас подключение к данным.

Update:

Я закончил установку 6.1.0 вручную с помощью консоли диспетчера пакетов

Install-Package EntityFramework -Version 6.1.0

Затем в моих файлах csporj, заменяющих

пакеты\EntityFramework.6.1.1

с

пакеты\EntityFramework.6.1.0

Я попытался создать EF Designer из базы данных и кода сначала из базы данных, но я все еще получаю ту же ошибку.

UPDATE

Я следил за инструкциями, которые предоставил Том, и благодарим время за то, что уделили время, чтобы ответить в глубину. Но я не могу заставить конструктор фреймворка сущности работать с SQLite 1.0.93. Что я нашел:

1) Когда я добавляю источник данных SQLite из меню инструментов, как говорит Том, я вижу поставщика данных SQLite.

Tools > Connect to Data Source

2) Но когда я перезапускаю визуальную студию, источник данных не подключен.

After restart connection is lost

3) Источник данных может быть обновлен и действителен после перезагрузки

Tables are shown after refresh

4) Добавить новый элемент данных, но SQLite не указан в качестве поставщика

SQLite is not listed as a provider

Я дважды проверил реестр и добавлен EF6 к имени инварианта, DLL SQLite зарегистрированы в GAC. Я попытаюсь посмотреть, что еще я могу найти, но на данный момент я не уверен, что искать. В качестве побочной заметки я пробовал dotConnect, и он не работает ни с EF 6.1.1.

Обновление 2

Кто-нибудь знает, имеет ли конструктор Entity Framework конструктор параметр регистрации, чтобы узнать, что может произойти?

4b9b3361

Ответ 1

[ UPDATE: для более простого решения, которое работает с Visual Studio 2013 Update 4 (Pro и Ultimate) и недавними версиями Sqlite Providers и EF, посмотрите на решение "broslav", опубликованное ниже. Не знаю, работает ли это с Express Express...]

Хорошо, это предложение. Это НЕ работает для выпусков Visual Studio Express. Кроме того, я не уверен, как заставить его работать для обновления существующего проекта. И это абсолютная боль в прикладе. Я не тестировал, если все требуется, но это должно работать:

Во-первых, НЕ используйте пакет NuGet для SQLite, но загрузите установщик сборки отсюда: http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

Установите установочный файл для установщика 32-разрядной версии Windows (.NET Framework 4.5.1): sqlite-netFx451-setup-bundle-x86-2013-1.0.93.0.exe(10.00 MiB) (не 64-разрядная версия), Это единственный проект с дизайнером.

Установите и выберите установку в GAC и установите конструктор для VS13.

Для следующего важна точный порядок!

Я сделал видео этих шагов, см.: http://vimeo.com/103372740

Создайте проект в VS13. Непосредственно настраивайте сборку на фреймворк 4.5.1 и x86. Сохраните и постройте.

Затем установите последний пакет EF 6 (6.1.1) из NuGet. Сохраните и постройте.

Вручную добавьте ссылки на установленные сборки SQLite (включая конструктор), в разделе "Справочный менеджер" в разделе "Ассембли" вы можете найти опцию "Расширения" для выбора четырех добавленных сборок в GAC: System.Data.SQLite Core + Designer + для Entity Framework + для LINQ.. Сохранить и построить.

Затем создайте соединение с вашей базой данных через "Подключиться к базе данных" в разделе "Инструменты". Прежде чем делать что-либо еще, сохраните и создайте, а затем RESTART Visual Studio. НЕ ДОЛЖНЫ СДЕЛАТЬ ЧТО-НИБУДЬ, прежде чем запускать ADO.NET Entity Data Model Wizard, поэтому НЕ обновляйте соединение с базой данных.

Добавьте модель данных сущности ADO.NET, выберите "Создать из базы данных". Ваше соединение с базой данных появится в раскрывающемся списке. Держите его там, но в любом случае выберите для создания нового подключения и снова выберите ту же самую базу (как если бы вы создавали новое соединение). Это звучит глупо, но это важно, см. Изображение ниже...

Connect Entity Model

Когда я на самом деле добавил ADO.NET Entity Data Model таким образом, что он представил раздражающую ошибку, но кнопка "Далее" выбирается и все работает независимо (удивительно)!

Работа дизайнера, получение данных и запись данных.

Не тестировал развертывание на другой машине, хотя... Я использую 64-разрядную версию Win7.

ИЗМЕНЕННОЕ ОБНОВЛЕНИЕ: Чтобы получить правильную конфигурацию для фактического доступа к базе данных, вам необходимо установить пакет System.Data.SQLite.EF6 из NuGet после выполнения all выше, а затем добавить <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> в App.Config и удалить других поставщиков и удалить все между <system.data></system.data>, иначе вы получите какое-то исключение. Но обратите внимание, что это означает, что каждый раз, когда вы хотите обновить модель EDMX, вам необходимо изменить инвариант App.ConfigName = "System.Data.SQLite" на инвариантName = "System.Data.SQLite.EF6" и наоборот.

** Это смешно? Да! И это вызвало у меня головную боль... **

Ответ 2

Это то, что сработало для меня:

  • имел Windows 8.1 Pro x64
  • имел обновление VisualStudio 2013 Ultimate Update 4
  • установлен http://system.data.sqlite.org/downloads/1.0.94.0/sqlite-netFx451-setup-bundle-x86-2013-1.0.94.0.exe (в GAC, плюс дизайнер)
  • установлен EFTools6.1.2ForVS2013.msi из https://www.microsoft.com/en-us/download/details.aspx?id=40762
  • в старом или новом решении/проекте, который нацелен на .NET 4.5.1 и любой процессор, установленный через пакет NuGet System.Data.SQLite
  • добавлена ​​новая модель из базы данных (я не видел поставщика SQLite здесь, пока не установил пакет NuGet внутри проекта)
  • чтобы фактически получить доступ к данным, мне пришлось перестроить элементы add и remove внутри тега DbProviderFactories в app.config

Итак, у меня были следующие пакеты:

    <packages>
      <package id="EntityFramework" version="6.1.1" targetFramework="net451" />
      <package id="System.Data.SQLite" version="1.0.94.1" targetFramework="net451" />
      <package id="System.Data.SQLite.Core" version="1.0.94.0" targetFramework="net451" />
      <package id="System.Data.SQLite.EF6" version="1.0.94.0" targetFramework="net451" />
      <package id="System.Data.SQLite.Linq" version="1.0.94.1" targetFramework="net451" />
    </packages>

а app.config, который работал у меня, имел содержимое:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <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" />
      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
    </providers>
  </entityFramework>
  <system.diagnostics>
    <sources>
      <!-- This section defines the logging configuration for My.Application.Log -->
      <source name="DefaultSource" switchName="DefaultSwitch">
        <listeners>
          <add name="FileLog" />
          <!-- Uncomment the below section to write to the Application Event Log -->
          <!--<add name="EventLog"/>-->
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="DefaultSwitch" value="Information" />
    </switches>
    <sharedListeners>
      <add name="FileLog" type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" initializeData="FileLogWriter" />
      <!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log -->
      <!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
    </sharedListeners>
  </system.diagnostics>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" />
  </startup>
  <system.data>
    <!--
        NOTE: The extra "remove" element below is to prevent the design-time
              support components within EF6 from selecting the legacy ADO.NET
              provider for SQLite (i.e. the one without any EF6 support).  It
              appears to only consider the first ADO.NET provider in the list
              within the resulting "app.config" or "web.config" file.
    -->
    <DbProviderFactories>
      <remove invariant="System.Data.SQLite" />
      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
      <remove invariant="System.Data.SQLite.EF6" />
      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add name="WorkinDataEntities" connectionString="metadata=res://*/WorkinDataModel.csdl|res://*/WorkinDataModel.ssdl|res://*/WorkinDataModel.msl;provider=System.Data.SQLite.EF6;provider connection string=&quot;data source=X:\dev\proj\workin\bin\data.db&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

Как вы можете видеть, как-то в конце концов, для меня нет необходимости удалять "EF6" из invariantName или удалять или переставлять другие поставщики или фабрики соединений по умолчанию. Мне не пришлось делать никаких ругательств. Переупорядочивание тегов add/remove (которые были добавлены во время установки пакета NuGet System.Data.SQLite 1.0.94.1) в стартовом проекте app.config сделало разницу.

После всего вышеперечисленного я обновил EntityFramework до 6.1.2 через NuGet, и как обновление модели из базы данных через конструктор, так и доступ к данным во время выполнения все еще работает.

Ответ 3

У меня наконец есть шаги, чтобы последовательно добавлять Sqlite и EF6 в проект:

EF6: версии 6.0.0 должны быть 6.1.3 (в настоящее время - последняя версия). System.Data.Sqlite: 1.0.93 - 1.0.95, но не 1.0.98 (в настоящее время последняя версия).

Чтобы избежать получения System.Data.Sqlite 1.0.98, не устанавливайте его с помощью диспетчера пакетов Nuget. Вручную установите System.Data.Sqlite. К сожалению, http://system.data.sqlite.org/ не всегда загружает предыдущие загрузки.

x86 System.Data.Sqlite 1.093

x64 System.Data.Sqlite 1.093

Я использую менеджер пакетов Nuget и устанавливаю EF6, а затем вручную добавляю библиотеку System.Data.Sqlite. Я несколько раз пытался использовать 1.0.98, но я не могу

Файл App.config

Для моей реализации я сначала работаю с базой данных, вручную кодируя классы данных сущности

 public partial class MyDbContextEF : DbContext
{
    public MyDbContext() : base("name=MyDbContext") { }

    public DbSet<DataRecord> DataRecords { get; set; }
}

[Table("TableName")]
public class DataRecord
{
    [Key]
    public Int64 RowID { get; set; }
    public string Name { get; set; }
}

Ответ 5

У меня была одна и та же проблема: мастер создания модели не показывал мой sqlite db в раскрывающемся списке. Я смог разрешить это, поиграв с подключением и таблицами sqlite db.

0a) Я добавил подключение через Server Explorer к моему sqlite файлу (поставщики и серверы sqlite, показанные в новом интерфейсе подключения для Server Explorer, но не мой мастер модели edmx) 0b) В этот момент он еще не показывался в мастере модели edmx, но отображался как соединение данных в проводнике сервера. 1) Я добавил таблицу в файл sqlite. 2) Я закрыл соединение с sqlite db через Server Explorer 3) Я открыл дизайн моей таблицы-заглушки с помощью файла sqlite через Server Explorer (таким образом, повторно установив соединение) 4) Я попытался "Обновить модель из базы данных...", и она показывалась в раскрывающемся списке

Еще один шаг, который я не включил выше, я создал и удалил базу данных .mdf SQL server New Item... > Database Service.... Я сделал это незадолго до того, как проделать вышеуказанные шаги. Я предполагаю, что это не имеет значения, но вы никогда не знаете.

Не знаю, что именно. Казалось, что ручное отсоединение и повторное подключение через серверный проводник заставил VS "просыпаться" и отобразить сервер в списке. Попытайтесь возиться с соединением и таблицами немного, чтобы увидеть, что это что-то просыпается.

Ответ 6

У меня тоже была эта проблема. Вероятно, причина в том, что я забыл отметить флажок visual studio при установке драйвера system.data.sqlite, а затем установить его с отметкой галочки без деинсталляции драйвера system.data.sqlite. Это как я решил это:

  • Удалите драйвер system.data.sqlite.
  • Reboot.
  • Установите драйвер system.data.sqlite
  • Удалите старое решение и настройте его заново, как и вы (возможно, не обязательно).
  • Добавьте модель объекта ADO.NET(шаблон для меня отсутствовал, этот ответ помог с этим)
  • Теперь должен быть доступен источник данных sqlite.