Pie*_* SS 22 c# sqlite entity-framework system.data.sqlite ef-code-first
我正在尝试使用EF动态创建嵌入式SQLite数据库但是,我无法使其工作,数据库文件永远不会被创建.
我有EF 4.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>
Run Code Online (Sandbox Code Playgroud)
数据库初始化程序(放入一些内容)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
的DbContext:
class PageDB : DbContext
{
public DbSet<WebPage> Pages { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
最后在主()
Database.SetInitializer( new PageDbInitializer() );
Run Code Online (Sandbox Code Playgroud)
我相信我有一些步骤缺失,但无法找到它们.
Lad*_*nka 24
System.Data.SQLite
在当前的版本仅EFv1兼容提供商(1,2).这意味着它没有EFv4(EFv4.2是EFv4的包装)功能,包括数据库创建和删除(检查MSDN中DbProviderServices
.NET 3.5和.NET 4.0的差异).因此,在使用SQLite时,您无法首先使用代码自动创建数据库.您必须手动创建数据库和所有表.
作为替代方案,您可以为SQLite使用不同的提供程序.例如,Devart的SQLite提供 r声明,它支持EFv4和4.1,从而支持数据库创建.
Jer*_*her 13
看一下这个:
https://github.com/msallin/SQLiteCodeFirst
也可以作为NuGet使用
它会为您的对象添加一些数据库初始化程序,例如 SqliteCreateDatabaseIfNotExists
以下是该网站的示例:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
23692 次 |
最近记录: |