c# entity-framework sqlite ef-code-first system.data.sqlite

c# - HOWTO: SQLite con EntityFramework y Code-First



entity-framework ef-code-first (2)

Mira esto:

https://github.com/msallin/SQLiteCodeFirst

También disponible como NuGet

Agrega algunos Inicializadores de DB a su ptoject, como SqliteCreateDatabaseIfNotExists

Aquí está el ejemplo del sitio web:

public class MyDbContext : DbContext { public MyDbContext() : base("ConnectionStringName") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { var sqliteConnectionInitializer = new SqliteCreateDatabaseIfNotExists<MyDbContext>( Database.Connection.ConnectionString, modelBuilder); Database.SetInitializer(sqliteConnectionInitializer); } }

Estoy intentando crear una base de datos SQLite incrustada sobre la marcha con el EF sin embargo, no puedo hacer que funcione, el archivo de la base de datos nunca se crea.

Tengo EF 4.2 y la última versión de SQLite

Esto es lo que tengo

app.config

<?xml version="1.0"?> <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"/> </DbProviderFactories> </system.data> <connectionStrings> <add name="DataContext" connectionString="Data Source=test.db;Version=3;New=True;" providerName="System.Data.SQLite" /> </connectionStrings> <startup> <supportedRuntime version="v4.0" /> </startup> </configuration>

DB inicializador (para poner algo de contenido en)

class PageDbInitializer : DropCreateDatabaseAlways<PageDB> { protected override void Seed(PageDB context) { for (int i = 0; i < 10; i++) { WebPage page = new WebPage() { Name = "Page" + (i + 1) }; context.Pages.Add(page); } base.Seed(context); } }

DbContext:

class PageDB : DbContext { public DbSet<WebPage> Pages { get; set; } }

Y finalmente en la principal ()

Database.SetInitializer( new PageDbInitializer() );

Creo que me faltan algunos pasos, pero no puedo encontrarlos.


System.Data.SQLite está en la versión actual solo proveedor compatible con EFv1 ( 1 , 2 ). Significa que no tiene funciones EFv4 (EFv4.2 se ajusta a EFv4), incluidas la creación y eliminación de bases de datos (verifique DbProviderServices diferencias de DbProviderServices para .NET 3.5 y .NET 4.0 en MSDN ). Debido a eso, no puede usar la creación automática de base de datos con código primero cuando trabaje con SQLite. Debe crear la base de datos y todas las tablas manualmente.

Como alternativa puede utilizar diferentes proveedores para SQLite. Por ejemplo , SQLite de Devart proporciona r afirmaciones de que admite EFv4 y 4.1 y, por lo tanto, la creación de bases de datos.