Кто-нибудь получил новый System.Data.SQLite 1.0.91.0 для работы с Entity Framework 6 в Visual Studio 201 #? Если да, как вы это сделали?
Обновление - 20 марта 2014 года: выпущен System.Data.SQLite 1.0.92.0, но мне не удавалось создать EDMX в VS2013:( Я закончил использование диспетчера пакетов (потому что EF6. #. # является зависимостью в новый пакет SQLite NuGet):
uninstall-package entityframework -force
перезапустите VS2013 и включите старый EF5, чтобы получить VS2013 для генерации EDMX из существующей базы данных:
install-package entityframework -version 5.0.0
Примечание. Это был не сложный, многозадачный SQLite реляционный тест базы данных, поэтому я не уверен, что возникнут другие проблемы, если я что-то использую с более чем двумя отношениями навигации (FK):/
ANSWER для EDMX/Model First: (Обновление - 2 марта 2014 года). Я нашел обход, но он недостаточно согласован и требует слишком много шагов, чтобы считать его действительным решением. В основном:
-
вы делаете все файлы класса,
-
установить соединение с существующей базой данных SQLite с таблицами,
-
измените файл web/app.config так, как описано mistachkin в по-прежнему выдающемся SQLite Trouble Ticket (http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77), включая фальсификацию cdsl/.ssdl/.msl, и
-
затем вручную создайте все Модели сущностей в Дизайнере в Пустое EDMX перед восстановлением проекта, а затем...
-
щелкните правой кнопкой мыши по объекту и выберите "Обновить из базы данных"...
Иногда EF/VS2013 добавляет .tt/DbContesxt, а иногда нет. Путь слишком "ударил или пропустил": (
ANSWER для "Code First" с и без существующей базы данных SQLite (на основе предложений PMCB, Drexter и Jimi). Обратите внимание, однако, что вы не можете автоматически генерировать любые EF-модели или файлы EDMX [sic - язык определения концептуальной схемы (.CSDL), язык определения схемы печати (.SSDL) и язык спецификации сопоставления (.MSL)] в Visual Studio 2013. Я сделал не пытайтесь вручную создать файлы EDMX, чтобы убедиться, что они будут приемлемы для EF, и даже если бы я это сделал, мне кажется, что выполнение всех ручных создания/сопоставления/изменений/редактирования XML поражает всю цель/концепцию структуры на основе сущности...
<connectionStrings>
<add name="DogsContext" connectionString="Data Source=|DataDirectory|\dogs.s3db;" providerName="System.Data.SQLite" />
</connectionStrings>
<entityFramework>
<providers>
<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</providers>
</entityFramework>
<system.data>
<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, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
<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, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</DbProviderFactories>
</system.data>
Вот тестовый класс (обратите внимание, что мне пришлось сменить DogID на Int64, чтобы он работал с SQLite...):
using System.Data.Entity;
namespace WebApplication1.Models
{
public class Dog
{
public Dog() { }
public Int64 DogID { get; set; }
public string DogName { get; set; }
}
}
и вот тест DbContext:
using System.Data.Entity;
namespace WebApplication1.Models
{
public class DogsContext : DbContext
{
public DogsContext() : base() { }
public DbSet<Dog> DogNames { get; set; }
}
}
============= Оригинальная информация о вопросе ==================
Вчера был выпущен SQLite 1.0.91.0 (http://system.data.sqlite.org/index.html/doc/trunk/www/news.wiki) с надписью "Добавить поддержку для Entity Framework 6". В включенном "Readme" есть оговорка, в которой вы добавили следующее к web.config/app.config:
<configuration>
<system.data>
<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, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</DbProviderFactories>
</system.data>
</configuration>
Если вы используете NuGet в VS2013 для добавления "System.Data.SQLite(x86/x64)" , теперь вы добавляете эту строку в файл web.config/app.config:
<entityFramework>
...
<providers>
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
...
</entityFramework>
В качестве теста я сделал копию рабочего приложения NET4.5.1/MVC4/EF5/System.Data.SQlite 1.0.90 и запустил пакет обновления PM: update. Он успешно добавил вышеприведенную строку в мой web.config, и я добавил необходимые фрагменты "DbProviderFactories". Перестроить и запустить... Не удалось найти "ни один поставщик". Я пробовал это без "DbProviderFactories"... Сбой с "отсутствием провайдера". Я удаляю новую часть "поставщика"... Сбой с "отсутствующим провайдером". Поэтому я пробую новый проект, но с Identity (OWIN) и без него, если это проблема. Ни одна из них не работает... В значительной степени заканчиваются идеи, поэтому просим здесь после поиска Google/StackOverflow.
============ 14 февраля 2014 года ===============
К сожалению, измененные записи и многочисленные варианты не работали на моем ПК... Я использую VS 2013 Pro на Win8.1 Pro x64. Я переустановил System.Data.SQLite. По крайней мере, я получаю новую ошибку как с существующей базой данных SQLite, так и с новой, созданной VS2013 (к которой я могу получить доступ и видеть, что она имеет правильную структуру с нулевыми таблицами):
"An error occurred connecting to the database. The database might be unavailable. An
exception of type 'System.Data.Entity.Core.ProviderIncompatibleException' occurred. The
error message is: Schema specified is not valid. Errors: StoreSchemaDefinition(2,64) :
Error 0175: The ADO.NET provider with invariant name 'System.Data.SQLite.EF6' is either
not registered in the machine or application config file, or could not be loaded. See the
inner exception for details.'"
Как EF6, так и System.Data.SQLite(x86/x64), куда вытащили через NuGet в новые веб-приложения MVC и приложение Windows Console. Оба вызвали ошибку выше... Я начинаю подозревать, что, возможно, что-то не так с моим VS3013, но я не хочу тратить еще 6 часов на загрузку и исправление, когда я могу работать с MVC4/SQLite/EF5...
===== 17 февраля 2014 года ========
@Jimi - Не повезло. Я попытался с NET 4.5 и 4.5.1 с новым MVC и Windows Application Project. Я пробовал с EF6.0.0 и EF6.0.2. Я попытался заменить 3x SQLite.Data.xxx.dll ссылки локальными копиями из установки System.Data.SQLite после добавления "System.Data.SQLite(x86/x64)" из NuGet. Я также попробовал пакет NuGet "System.Data.SQLite.MSIL" вместо добавления DBFactories к различным версиям Web.Config и App.Config, которые я пробовал.
Я также попытался создать веб-приложение NET 4.0 MVC4, но, похоже, NuGets "System.Data.SQLite(x86/x64)" теперь включает требование для EF6. Будучи обнадеживающим, я согласился с этим и попробовал различные "сохранить/создать новое соединение/изменить web.config/etc, но это не сработает. Я отказался от этого и вернулся к SQLite с наборами данных, поэтому я могу использовать Linq с System.Data.DataSetExtensions, создав DataTables" AsEnumerable" (или Java (jdbc) для людей, которым нужна автономная копия базы данных на их Android OS с минимальным интерфейсом приложения).
========= 19 февраля 2014 года =======
@Christian Sauer - я не получал EF6 и System.Data.SQLite(или System.Data.SQLite.EF6) для совместной работы, но... но
Я только что нашел обновление http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77, в котором говорится, что есть новый пакет SQLite NuGet:
mistachkin added on 2014-02-19 03:39:35:
All NuGet packages have been updated to 1.0.91.3. Several fixes are included
that pertain to supporting Entity Framework 6.
Я тестирую его сейчас с помощью нового проекта (MVC Web Project в VS2013 с использованием EF6.0.2 и SQLite 1.0.91.3, который предназначен для .NET 4.5.1)...
Не повезло с новым SQLite 1.0.91.3. Файл web.config изменился на:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<system.data>
<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>
Я собираюсь попробовать испортить конфигурацию после работы (как было предложено Jimi и PCMB) и опубликовать любые выводы.
Я просто попытался переустановить как 32, так и 64-разрядные версии System.Data.SQLite(с добавлением и без добавления в GAC), но EF6 не будет работать с SQLite. Если я попытаюсь вручную построить модель и сопоставления, она не срабатывает в любое время, когда я ссылаюсь/пытаюсь использовать EF6. Что касается создания моделей данных Entity (будь то из существующей базы данных SQLite или новой базы данных SQLite), это приведет к сбою/ошибке, независимо от того, что я делаю для конфигураций, соединений или поставщиков.
=========== 22 февраля 2014 года =============
Они вытащили/откатили обновление System.Data.SQLite 1.0.91.3 до 1.0.91.0. Существует еще выдающийся билет (http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77), который включает некоторые предложения mistachkin. Вот пример использования app.config mistachkin (этот конфиг не работал у меня ни до, ни...):
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<system.data>
<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, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
<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, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="northwindEFEntities" connectionString="metadata=res://*/NorthwindModel.EF6.2013.csdl|res://*/NorthwindModel.EF6.2013.ssdl|res://*/NorthwindModel.EF6.2013.msl;provider=System.Data.SQLite.EF6;provider connection string="data source=.\northwindEF.db"" providerName="System.Data.EntityClient" />
</connectionStrings>
<entityFramework>
<providers>
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</providers>
</entityFramework>
</configuration>
после того, как я попробовал предложение mistachkin добавить DLL в GAC (сделано с .NET "gacutil.exe" )...