使用Entity Framework创建SQLite数据库
我正在尝试创建我的第一个数据库。 我看到使用现有数据库和配置文件完成创建的无数post。 我想要实现的是,从代码创建数据库,并在代码后面进行初始化,没有配置文件。
我的MyContext类中有以下内容:
public MyContext() : base("MyDB") { DatabaseConfiguration _DBConfig = new DatabaseConfiguration(); } public DbSet MyObject { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions .Remove(); }
假设每当我创建MyContext的实例时,如果不存在,我应该创建一个数据库。 但是没有文件被创建。
初始化完成如下:
class DatabaseConfiguration : DbConfiguration { public DatabaseConfiguration() { SetProviderFactory("System.Data.SQLite", SQLiteFactory.Instance); SetProviderFactory("System.Data.SQLite.EF6", SQLiteProviderFactory.Instance); SetProviderServices("System.Data.SQLite", (DbProviderServices)SQLiteProviderFactory.Instance.GetService(typeof(DbProviderServices))); } }
我正在使用NuGet的SQLite和EF6的最新版本。
你认为你告诉它使用你的DatabaseConfiguration
,但你不是。 简单地在构造函数中声明局部变量不会告诉上下文使用该配置。 您可以使用DbConfigurationType
属性告诉它。
[DbConfigurationType(typeof(DatabaseConfiguration))] public class MyContext : DbContext { public MyContext() : base("MyDB") { } public DbSet MyObject { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove(); } }
据我所知,Entity Framework不支持为SQLite创建数据库+表。 您可以通过外部工具创建数据库模板,然后按照本文中的建议运行手动迁移,以创建或更新数据库模式。