使用实体框架

时间:2015-04-27 19:20:15

标签: c# wpf sqlite

我正在尝试创建我的第一个数据库。我看到使用现有数据库和配置文件完成创建的无数帖子。我想要实现的是从代码创建数据库,并在代码后面进行初始化,而不需要配置文件。

我的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的最新版本。

2 个答案:

答案 0 :(得分:2)

你告诉它使用你的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>();
    }
}

答案 1 :(得分:0)

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