实体框架6和SQLite /代码优先

时间:2015-11-10 17:17:09

标签: c# entity-framework sqlite

我正在尝试使用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();
        }
    }
}

谢谢!

0 个答案:

没有答案