【发布时间】:2015-04-27 19:20:14
【问题描述】:
我正在尝试创建我的第一个数据库。我看到无数关于使用现有数据库和配置文件创建的帖子。不过,我想要实现的是从代码创建数据库,并在后面的代码中进行初始化,而不需要配置文件。
我的 MyContext 类中有以下内容:
public MyContext() : base("MyDB")
{
DatabaseConfiguration _DBConfig = new DatabaseConfiguration();
}
public DbSet<MyObject> MyObject { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions
.Remove<PluralizingTableNameConvention>();
}
假设每当我创建 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。
【问题讨论】:
-
如果我没记错的话,在你需要数据库之前,它并没有真正创建。 IE。 填充它。
-
你如何告诉你的上下文使用
DatabaseConfiguration?简单地在构造函数中声明一个局部变量是不行的。 -
@mason 仔细查看构造函数内部发生的情况,这些是正在执行的显式提供程序设置。