【问题标题】:Create SQLite database using Entity Framework使用实体框架创建 SQLite 数据库
【发布时间】: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 仔细查看构造函数内部发生的情况,这些是正在执行的显式提供程序设置。

标签: c# wpf sqlite


【解决方案1】:

认为你告诉它使用你的DatabaseConfiguration,但你不是。简单地在构造函数中声明一个局部变量并不会告诉上下文使用该配置。你可以通过DbConfigurationType 属性来判断。

[DbConfigurationType(typeof(DatabaseConfiguration))] 
public class MyContext : DbContext
{
    public MyContext() : base("MyDB") 
    {
    }

    public DbSet<MyObject> MyObject { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}

【讨论】:

    【解决方案2】:

    据我所知,Entity Framework 不支持为 SQLite 创建数据库 + 表。您可以通过外部工具创建数据库模板,然后按照post 中的建议运行手动迁移以创建或更新数据库架构。

    【讨论】:

      猜你喜欢
      • 2016-05-20
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      • 2019-12-24
      相关资源
      最近更新 更多