我在使用SQLite時遇到了Entity Framework中的主鍵問題。 SQLite希望在自動增量主鍵列的VALUES列表中顯式使用NULL。我實際上並沒有在EF上下文中查看生成的SQL,但我相信這是按照通常的SQL Server慣例爲autoincrementing列提供的值。具有實體框架的SQLite
根據ADO.NET SQLite提供程序的site,EF完全支持,但我在這裏找不到任何幫助。有沒有辦法強制EF顯式爲主鍵值插入NULL?
我在使用SQLite時遇到了Entity Framework中的主鍵問題。 SQLite希望在自動增量主鍵列的VALUES列表中顯式使用NULL。我實際上並沒有在EF上下文中查看生成的SQL,但我相信這是按照通常的SQL Server慣例爲autoincrementing列提供的值。具有實體框架的SQLite
根據ADO.NET SQLite提供程序的site,EF完全支持,但我在這裏找不到任何幫助。有沒有辦法強制EF顯式爲主鍵值插入NULL?
嗯,我終於完成了這項工作:D。您需要將id列設置爲autoincrement,這樣它可以與EF一起工作。不要問我爲什麼在關於sqlite常見問題中的自動增量的問題中沒有提到。這是一個例子:
create table Persona (PersonaID integer primary key autoincrement, Nombre text)
而且,我也沒有找到一種方法,在Visual Studio中設置此,我不得不在命令行工具來完成。
更新:以下代碼正常工作。
PruebaDBEntities data = new PruebaDBEntities();
foreach (int num in Enumerable.Range(1, 1000))
{
Persona p = new Persona() { Nombre = "Persona " + num, Edad = num };
data.AddToPersona(p);
data.SaveChanges();
Console.WriteLine(p.PersonaID);
}
PersonaID沒有設置,並且在保存操作之後,它有由sqlite簽名的值。
我和EF和SQLite有同樣的問題。 嘗試檢查的第二個職位: http://sqlite.phxsoftware.com/forums/p/1418/6162.aspx
我的問題的原因是,自動增量被添加到數據庫本身,而是實體模型是無法正確刷新。刷新後所以,我場看起來是這樣的:
<Property Name="ID" Type="integer" Nullable="false" StoreGeneratedPattern="Identity" />
(StoreGeneratedPattern =「身份」加入)
刷新(與舊型號)之前,我只是想設置id屬性爲0,這也起作用:)
Hooray ...我找到了解決方案!
從書中,「權威指南SQLite的」我讀下主鍵約束如下:
「但實際上,這個列只是ROWID的別名,它們都會引用相同的值。」
我認爲這是需要在列定義中設置AUTOINCREMENT的原因。
您必須將自動增量設置爲True。 在設計表格窗口中單擊工具欄上的(管理索引和鍵)圖標,可直接從VS中進行設置,然後更新模型。
看來EF提供商SQLite不拿起列標識(自動增量)。
對於數據庫首先,右鍵單擊EDMX設計器中的列,並將StoreGeneratedPattern
設置爲Identity
。
我處於相同的情況。我試過換了很久很久?在生成的代碼中,所以我至少可以自己設置null,但它不起作用。錯誤消息是:「對數據庫的更改已成功提交,但更新對象上下文時發生錯誤。ObjectContext可能處於不一致狀態。內部異常消息:定義EntityKey的鍵值對不能爲空或空。\ r \ n參數名稱:記錄「。似乎沒有辦法繞過這個,處理自動增量的sqlite方式有點奇怪。 – Pablote 2009-06-03 02:49:07
我放棄了SQLite與EF的結合。在System.Data.Sqlite站點的論壇上有一篇關於這個問題的文章,但是一段時間以來一直沒有任何移動或響應。我轉向了SQL Compact,它提出了自己的問題。您無法使用EF/SQLCompact執行「服務器生成的密鑰」。所以,現在我爲插入做標準的連接/命令式ADO,並且我使用了LINQ糖的EF。 – 2009-06-03 16:55:43
這很糟糕。我想在sqlite中可以使用相同的「技巧」。我已經測試了CE和LINQ到sql的自動增量,它似乎工作。沒有用sqlite試過它,不知道它是否可能。 – Pablote 2009-06-04 16:03:16