在我的代码中,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;
我在此问题中遗漏的表配置代码,可以根据需要添加它。普通的控制台测试应用程序没有问题。
编辑:我使用代码优先方法创建数据库。
答案 0 :(得分:1)
您似乎错过了对
的调用_context.Database.EnsureCreated();
这将确保1.文件在那里,2。表格被创建。
:警告:不要在DbContext的构造函数中调用它。