簡體   English   中英

.NET 4.0 + Linq + SQLite + DbLink-如何使它們一起工作?

[英].NET 4.0 + Linq + SQLite + DbLink - how do I make it all work together?

我正在開發(或嘗試開發)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 Provider?

編輯:表映射:(盡管我懷疑錯誤在這里,因為讀取表(使用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();

我猜您正在為ORM使用實體框架?

在MyDatabase類中,您將從DataContext繼承。 這代表了LINQ to SQL框架的主要入口點。 這對於SQL Server來說效果很好。 使用SQLite不太好。

而是從ObjecContext類繼承。 這提供了將實體數據作為對象進行查詢和使用的便利。 您可能必須修改用於查詢的代碼,但這應該很簡單。

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

帕特里克

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM