作者:南阳啸68 | 来源:互联网 | 2023-02-13 12:32
我试图首先用SQLite和EntityFramework 6代码实现这个问题.我可以创建数据库并且有一个文件(虽然是空的),但是当我尝试向数据库添加一个条目时,它说没有这样的表.然而,当我尝试手动创建表时()它告诉我表已经存在.db.Database.ExecuteSqlCommand("CREATE TABLE etc.)
我已经发现了一些关于这个的问题,但是它们都是关于不是绝对的道路,这根本不是这里的情况.
上下文
//Context:
class MediaContext : DbContext
{
public DbSet Media { get; set; }
public MediaContext(string filename): base(new SQLiteConnection() {
COnnectionString=
new SQLiteConnectionStringBuilder()
{ DataSource = filename, ForeignKeys = false }
.ConnectionString
}, true)
{
}
}
DAL
//In the DAL:
public DataAccessLayer(string path)
{
_path = Path.GetFullPath(path); //<--The path already comes full in, I'm just paranoid at this point.
_cOnnectionPath= _path + @"\MyDatabase.sqlite";
using (var db = new MediaContext(_connectionPath))
{
db.Database.CreateIfNotExists();
db.Database.Initialize(false);
db.SaveChanges();
}
public void Generate()
{
using (var db = new MediaContext(_connectionPath))
{
db.Media.Add(new MediaModel("test"));
db.SaveChanges(); //<--SQLiteException: SQL logic error or missing database: no such table: MediaModels
}
}
App.Config中
//App.config:
ErikEJ..
6
EF6的SQLite提供程序不支持"代码优先/迁移"工作流,因此您必须在EF6工作流之外手动创建数据库.
1> ErikEJ..:
EF6的SQLite提供程序不支持"代码优先/迁移"工作流,因此您必须在EF6工作流之外手动创建数据库.
2> Kay..:
这篇文章激发了我的Code First方法的工作:
使用Entity Framework Core Code First创建SQLite DB
诀窍是要在上下文构造函数中调用sureCreated:
public MediaContext()
{
Database.EnsureCreated();
}
关于表名与属性名的匹配:
您可以使用该Table
属性使事情起作用:
public DbSet Media { get; set; }
并在模型类中显式指定表名,尽管这似乎很多余:
[Table("MediaModel")]
public class MediaModel