SQLite 和 LINQ to SQL - DataContext 和数据库创建问题

Ale*_*lex 5 .net c# sqlite linq-to-sql

我用 C# 编写了一个使用 SQLite 数据库的 .NET 应用程序。我想使用 LINQ to SQL 作为 ORM 来处理数据库。因此,出于这个原因,我的项目中安装了两个 nuget 包:System.Data.SQLite Core (x86/x64)System.Data.SQLite LINQ

以下是我的应用程序中的一些简化代码:

[Table]
public class Entity
{
    [Column(IsPrimaryKey = true, IsDbGenerated = true, CanBeNull = false)]
    public int Id { get; set; }

    [Column]
    public string Data { get; set; }
}

public class EntityDataContent : DataContext
{
    public EntityDataContent(IDbConnection connection) : base(connection)
    {
    }

    public Table<Entity> Entities
    {
        get { return GetTable<Entity>(); }
    }
}
Run Code Online (Sandbox Code Playgroud)

为了从数据库获取数据,我使用以下代码:

SQLiteConnection connection = new SQLiteConnection("Data Source=db.sqlite; Version=3;");
using (EntityDataContent dataContext = new EntityDataContent(connection))
{
    return dataContext.Entities.ToList();
}
Run Code Online (Sandbox Code Playgroud)

它不会工作,因为里面没有数据库和表。所以首先应该创建它们:

using (EntityDataContent dataContext = new EntityDataContent(connectionString))
{
    if (!dataContext.DatabaseExists())
    {
        dataContext.CreateDatabase();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题就在这里。此代码抛出 SQLiteException 并显示消息:

SQL logic error or missing database
near "DATABASE": syntax error
Run Code Online (Sandbox Code Playgroud)

都是因为数据库提供者试图借助 来创建数据库CREATE DATABASE,但 SQLite 中没有这样的操作。文件本身已经是一个数据库。

所以我想我DataContext使用默认的数据库提供程序而不是相应的 nuget 包提供的 SQLite 实现。我不知道如何解决这个问题以及问题出在哪里。你有什么建议吗?