我正在尝试使用Entite Framework 6 Code First和SQLite数据库。
问题是数据库永远不会使用模式进行初始化(不创建表)。我猜这是因为我将SQLiteConnection传递给子类DBContext,并且由于数据库始终存在(尽管文件大小= 0),因此初始化程序永远不会运行。
我想要使用的数据:
class Game
{
public int GameId { get; set; }
public String Title { get; set; }
}
class GameContext : DbContext
{
public GameContext(String filename)
: base( new SQLiteConnection() { ConnectionString = new SQLiteConnectionStringBuilder() { DataSource = filename, ForeignKeys = true, }.ConnectionString }, true)
{
}
public DbSet<Game> Games { get; set; }
}
打开数据库并创建示例对象:
using (var db = new GameContext("prueba7.sqlite"))
{
Game g = new Game { Title = "Juego 1" };
db.Games.Add(g);
db.SaveChanges();
}
内部异常错误是:{“SQL逻辑错误或缺少数据库\ r \ nno这样的表:游戏”}
如果我启用日志记录(Database.Log = Console.Write;),打开数据库后会看到一些查询和错误:
SQLite错误(1):没有这样的表:__ MobileHistory
SQLite错误(1):没有这样的表:EdmMetadata
- 32 ms失败并出现错误:SQL逻辑错误或数据库丢失 没有这样的表:游戏
我尝试创建一个自定义Initializator,如下所示,但正如我所说,该代码永远不会运行... Database.Exists()始终返回true。
public class Initializer : IDatabaseInitializer<GameContext>
{
public void InitializeDatabase(GameContext context)
{
if (!context.Database.Exists())
{
context.Database.Create();
context.SaveChanges();
}
}
}
谢谢!