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.