我在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>(); }
}
}
要从数据库获取数据,我使用以下代码:
SQLiteConnection connection = new SQLiteConnection("Data Source=db.sqlite; Version=3;");
using (EntityDataContent dataContext = new EntityDataContent(connection))
{
return dataContext.Entities.ToList();
}
它不会起作用,因为它里面没有数据库和表格。所以一开始应该创建它们:
using (EntityDataContent dataContext = new EntityDataContent(connectionString))
{
if (!dataContext.DatabaseExists())
{
dataContext.CreateDatabase();
}
}
这就是问题所在。此代码抛出带有消息的SQLiteException:
SQL logic error or missing database
near "DATABASE": syntax error
全部是因为数据库提供程序尝试在CREATE DATABASE
的帮助下创建数据库,但SQLite中没有此类操作。文件本身就是一个数据库。
所以我认为我的DataContext
使用默认数据库提供程序而不是相应的nuget包提供的SQLite实现。我无法弄清楚如何解决这个问题以及可能出现问题的地方。你有什么建议吗?