. net 4.0 + Linq + SQLite + DbLink -我如何使它们一起工作

本文关键字:何使它 一起 工作 DbLink Linq SQLite net | 更新日期: 2023-09-27 18:13:52

我正在开发(或试图开发)一个c#项目,该项目将数据存储在SQLite数据库中。我想使用Linq进行对象关系映射。根据我所读到的,如果你下载System.Data.SQLite和dblinq,它可以与SQLite一起使用。

虽然它主要用于从DB读取数据,但在尝试插入任何东西时,我得到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
}

这似乎是一个SQL查询MS服务器,而不是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();

. net 4.0 + Linq + SQLite + DbLink -我如何使它们一起工作

我猜你正在使用实体框架的ORM?

在你的MyDatabase类中,你继承了DataContext。这代表了LINQ to SQL框架的主要入口点。这适用于SQL Server。

相反,从ObjecContext类继承。这为作为对象查询和处理实体数据提供了便利。您可能需要修改用于查询的代码,但它应该非常直接。

做一些搜索实体框架和ObjectContext,有一堆很好的例子。

Patrick。