【问题标题】:.NET 4.0 + Linq + SQLite + DbLink - how do I make it all work together?.NET 4.0 + Linq + SQLite + DbLink - 我如何让它们一起工作?
【发布时间】:2011-11-09 13:47:41
【问题描述】:

我正在使用 C# 开发(或尝试开发)一个项目,该项目将数据存储在 SQLite 数据库中。我想使用 Linq 进行对象关系映射。根据我读过的内容,如果您下载System.Data.SQLitedblinq,则可以将它与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();

【问题讨论】:

  • 你的表映射是什么样的?

标签: c# .net linq sqlite dblinq


【解决方案1】:

我猜您正在使用实体框架作为 ORM?

在您的 MyDatabase 类中,您继承自 DataContext。这表示 LINQ to SQL 框架的主要入口点。这适用于 SQL Server。 SQLite 不太好。

而是从ObjecContext 类继承。这为查询和使用实体数据作为对象提供了便利。您可能必须修改用于查询的代码,但它应该非常简单。

在 Entity Framework 和 ObjectContext 上搜索一下,有很多很好的例子。

帕特里克。

【讨论】:

    猜你喜欢
    • 2010-10-01
    • 2013-04-09
    • 2014-10-02
    • 2019-11-22
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多