EFを使用してその場で埋め込みSQLiteデータベースを作成しようとしていますが、それを機能させることができず、データベースファイルが作成されません。
私はEF4.2と最新バージョンのSQLiteを持っています
これが私が持っているものです
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初期化子(コンテンツを入れるため)
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; }
}
そして最後にmain()で
Database.SetInitializer( new PageDbInitializer() );
いくつかのステップが欠けていると思いますが、見つけることができません。
System.Data.SQLite
は、現在のバージョンではEFv1互換プロバイダーのみです( 1 、 2 )。これは、データベースの作成と削除を含むEFv4(EFv4.2はEFv4のラッパー)機能がないことを意味します(.NET3.5と.NET4.0のDbProviderServices
の違いを確認してください [〜#〜] msdn [〜#〜] )。そのため、SQLiteを使用する場合、最初にコードでデータベースの自動作成を使用することはできません。データベースとすべてのテーブルを手動で作成する必要があります。
別の方法として、SQLiteに別のプロバイダーを使用できます。たとえば DevartのSQLiteが提供 rは、EFv4と4.1をサポートしているため、データベースの作成をサポートしていると主張しています。
これをチェックしてください:
https://github.com/msallin/SQLiteCodeFirst
NuGet としても利用可能
SqliteCreateDatabaseIfNotExists
などのDBイニシャライザーをプロジェクトに追加します
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);
}
}