在SQLite的:LINQPad:如何使用SQLite整數主鍵自動分配
如果表中包含類型INTEGER PRIMARY KEY的列,則該列成爲用於ROWID的別名。
將新行插入到SQLite表中時,ROWID可以指定爲INSERT語句的一部分,也可以由數據庫引擎自動分配。
如果未在插入中指定ROWID,或者指定的ROWID的值爲NULL,則會自動創建適當的ROWID。
我在SQLite中用一個整數主鍵創建了一個表,然後在LINQPad中打開這個文件。我試圖通過C#向表中插入新行:
var episode = new RateableItem()
{
SourceId = "tal",
Edition = episodeNum.ToString(),
Name = episodeName,
Consumed = false
};
RateableItems.InsertOnSubmit(episode);
SubmitChanges();
在上面的示例中,我沒有指定pimary鍵。這失敗了,因爲LINQPad已將主鍵映射到非可爲空的int,所以生成的SQL向主鍵插入0,由於PK 0的行已存在,所以失敗。
有沒有辦法用SQLite配置LINQPad,使它爲PK傳遞一個空值,從而允許SQLite自動分配PK值?
我有一對SqLite表。我自己創造的東西都展現出你所看到的行爲。但是http://www.sqlitetutorial.net/sqlite-sample-database/中的示例數據庫(它看起來是以相同的方式定義的)在LinqPad – sgmoore
中按預期工作,謝謝@sgmoore,這很有幫助!我發現的差異是樣本數據庫中的表格使用AUTOINCREMENT創建了PK。當我更改將其添加到我的表中時,它工作 - 儘管LINQPad的Schema Explorer沒有顯示兩者之間的任何區別,我可以創建一個新的對象,而無需指定密鑰。幸運的是,我對AUTOINCREMENT附帶的附加行爲很滿意。 –