无法解析DbContext构造函数 - 数据库创建错误

时间:2016-01-28 18:38:16

标签: c# wpf sqlite code-first entity-framework-core

在我的代码中,EF7没有创建实际正确的sqlite数据库。我假设问题的一个根可能是以下错误,首先是代码片段:。

public class Database : DbContext
{ 
    public Database()
        : base("Database")
    {
    }

    public virtual DbSet<Device> Devices { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        var connectionStringBuilder = new SqliteConnectionStringBuilder { DataSource = "test2.sqlite" };
        var connectionString = connectionStringBuilder.ToString();
        var connection = new SqliteConnection(connectionString);

        optionsBuilder.UseSqlite(connection);
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    }
}

我使用WPF和实体框架7与Sqlite。我在尝试编译代码时收到的错误如下:

  

无法解析构造函数&#39; DbContext(string)&#39;,候选人是:   DbContext(Microsoft.Data.Entity.Infrastructure.DbContextOptions)(in   class DbContext)DbContext(System.IServiceProvider)(在类中   的DbContext)

我在 MainWindow.xaml.cs

中调用数据库
public partial class MainWindow : Window
{
    private Database _context = new Database();
    public MainWindow()
    {
        InitializeComponent();
    }
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        _context.Devices.Add(new Device
        {
            ProductCode = "100",
            TimeCreated = DateTime.Now
        });
        _context.SaveChanges();
        System.Windows.Data.CollectionViewSource deviceViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("DeviceViewSource")));

        //_context.Devices.Include(d => d.Name).Load();
        //deviceViewSource.Source = _context.Devices.GetLocal();
        //deviceViewSource.Source = _context.Categories.GetLocal();
    }

我的代码编译时没有:base("Database")定义,但即使创建了* .sqlite文件,它也没有任何表并抛出此异常:

  

&#34; SQLite错误1:&#39;没有这样的表:设备&#39;&#34;

我在此问题中遗漏的表配置代码,可以根据需要添加它。普通的控制台测试应用程序没有问题。

编辑:我使用代码优先方法创建数据库。

1 个答案:

答案 0 :(得分:1)

您似乎错过了对

的调用
_context.Database.EnsureCreated();

这将确保1.文件在那里,2。表格被创建。

:警告:不要在DbContext的构造函数中调用它。