我正在开发(或尝试开发)一个 C# 项目,该项目将数据存储在 SQLite 数据库中。我想使用 Linq 进行对象关系映射。根据我所阅读的内容,如果您下载System.Data.SQLite和dblinq ,则可以将其与 SQLite 一起使用。
虽然它主要适用于从数据库中读取数据,但在尝试插入任何内容时会出现 SQL 语法错误。我检查了 Linq 正在尝试执行此类查询的日志:
{INSERT INTO [sometable]([columnone], [columntwo])
VALUES (@p0, @p1)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input String (Size = 4000; Prec = 0; Scale = 0) [foo]
-- @p1: Input String (Size = 4000; Prec = 0; Scale = 0) [bar]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1
}
它似乎是 MS Server 的 SQL 查询,而不是 SQLite。令人沮丧的是这个SqlProvider(Sql2008)
。不应该用dblinq提供的东西代替吗?
我的数据库类如下所示:
[Database]
class MyDatabase : DataContext
{
public LibraryDatabase()
: base(new SQLiteConnection(
"DbLinqProvider=Sqlite; " +
"Data Source=database.s3db;"))
{
}
public Table<SomeObject> SomeTable;
}
连接字符串取自dblinq wiki。
为什么它不起作用?是因为我使用的是 .NET 4.0 吗?有没有人成功使用过这样的组合?是否有另一种方法来替换 Linq 提供程序?
编辑:表映射:(虽然我怀疑错误在这里,因为读取表(使用 foreach 循环)似乎有效)
[Table(Name="sometable")]
class Element
{
[Column(Name = "id", IsPrimaryKey = true, IsDbGenerated=true)]
public int Id { get; set; }
[Column(Name="columnone")]
public string PropertyOne {get; set;}
[Column(Name="columntwo")]
public string PropertyTwo {get; set;}
}
表之间的所有关系都被注释掉以进行测试(没有帮助)。然后使用以下代码插入一个元素:
myDatabase.SomeTable.InsertOnSubmit(element);
myDatabase.SubmitChanges();