2013-11-24 37 views
4

今天我已经开始应对数据库。我已经安装了SQLite和SQLite-net。我正在使用C#编程Windows 8.1应用程序。SQLite; “无法添加PRIMARY KEY列”-Exception

我所拥有的是以下几点:

模型:

public class Subject 
{ 
    [PrimaryKey, AutoIncrement] 
    public int Id { get; set; } 

    public string Name { get; set; }  
} 

而且OnLaunched-事件在App.Xaml.cs包含:

protected override void OnLaunched(LaunchActivatedEventArgs e) 
{ 
[...] 
    // Get a reference to the SQLite database 
    DBPath = Path.Combine(
     Windows.Storage.ApplicationData.Current.LocalFolder.Path, "Subjects.s3db"); 
    // Initialize the database if necessary 
    using (var db = new SQLite.SQLiteConnection(DBPath)) 
    { 
     // Create the tables if they don't exist 
     db.CreateTable<Subject>(); 
    } 
[...] 
} 

当我启动这个我在db.CreateTable()之后得到以下错误;被执行:

无法添加PRIMARY KEY列。

这里怎么回事?我真的很感谢你的帮助。

非常感谢。

问候,FunkyPeanut

+0

不知道后,但不是你想创建一个已经存在的表? – 2013-11-24 16:57:35

+0

嘿,感谢您的快速评论。那么我不知道,但我认为“CreateTable”表达式只创建一个表,如果它不存在。嗯....谢谢虽然! – FunkyPeanut

+0

你最好检查一下。建立一个没有任何表的测试数据库,看看发生了什么。 – 2013-11-24 17:07:16

回答

7

我相信这一切,因为你已经通过添加或从Subject类删除场改变数据库表的模式。即在已经运行应用程序以创建Subject表之后,您已添加Id属性。

这就是为什么它使用新的DB文件。您可能需要修改模式(在SQLite中涉及创建新表,从现有表复制数据,删除现有表,然后重命名新表),或者只需删除旧数据库文件并创建一个新数据库。

0

我有同样的问题。 做构建/清理为我排序的问题。

0

我有同样的问题......这是愚蠢,但它是因为当我复制从另一个表,我忘了更改其名称/粘贴代码......

[Table("CopiedTable")] 
之前

[Table("MyNewTable")]