2011-11-09 61 views
1

我正在開發(或試圖開發)C#中的項目,該項目將數據存儲在SQLite數據庫中。我想使用Linq進行對象關係映射。根據我讀過的內容,如果你下載了System.Data.SQLitedblinq,可以使用它與SQLite。.NET 4.0 + Linq + SQLite + DbLink - 我如何使它們一起工作?

雖然它主要用於從數據庫中讀取數據,但在嘗試插入任何內容時會出現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服務器的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(); 
+0

你的表映射是什麼樣的? – Pieter

回答

1

我猜你正在使用實體框架的ORM?

在您的MyDatabase類中,您繼承自DataContext。這代表了LINQ to SQL框架的主要入口點。這適用於SQL Server。 SQLite不太好。

相反,繼承ObjecContext類。這提供了查詢和處理實體數據作爲對象的工具。您可能需要修改用於查詢的代碼,但應該非常直截了當。

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

Patrick。

相關問題