C# SQLite&引用;无法添加主键列"-例外情况
今天我开始处理数据库。我已经安装了SQLite和SQLite net。我正在用C#编写一个Windows 8.1应用程序 我所拥有的一切如下: 模型:C# SQLite&引用;无法添加主键列"-例外情况,c#,sql,C#,Sql,今天我开始处理数据库。我已经安装了SQLite和SQLite net。我正在用C#编写一个Windows 8.1应用程序 我所拥有的一切如下: 模型: public class Subject { [PrimaryKey, AutoIncrement] public int Id { get; set; } public string Name { get; set; } } App.Xaml.cs中的OnLaunched事件包含: protected ove
public class Subject
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string Name { get; set; }
}
App.Xaml.cs中的OnLaunched事件包含:
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>();
}
[...]
}
protectedoverride void OnLaunched(启动ActivatedEventargs e)
{
[...]
//获取对SQLite数据库的引用
DBPath=Path.Combine(
Windows.Storage.ApplicationData.Current.LocalFolder.Path,“Subjects.s3db”);
//如有必要,初始化数据库
使用(var db=new SQLite.SQLiteConnection(DBPath))
{
//如果表不存在,则创建它们
db.CreateTable();
}
[...]
}
当我启动它时,在db.CreateTable()之后出现以下错误:;已执行:
无法添加主键列
这里出了什么问题?我真的很感激你的帮助
多谢各位
您好,Funkypeant我相信这是因为您通过在
主题
类中添加或删除字段更改了DB表的模式。也就是说,您已经在运行应用程序以创建主题
表之后添加了Id
属性
这就是为什么它与一个新的DB文件一起工作。您要么需要修改模式(在SQLite中涉及创建新表、从现有表复制数据、删除现有表然后重命名新表),要么只需删除旧的DB文件并创建一个新文件。我也有同样的问题。
进行构建/清理为我解决了问题。我也遇到了同样的问题。。。这太愚蠢了,但这是因为当我从另一个表复制/粘贴代码时,我忘了更改它的名称 以前
[Table("CopiedTable")]
之后
不确定,但您不是在尝试创建一个已经存在的表吗?嘿,谢谢您的快速评论。我不确定,但我认为“CreateTable”表达式只会在不存在的情况下创建一个表。隐马尔可夫模型。。。。谢谢你!你最好检查一下。设置一个没有任何表的测试数据库,看看会发生什么。嗯,你似乎是对的。当我将数据库名称更改为Subject.s3db时,即使我重新启动或完全重新启动应用程序,一切都正常!谢谢你!哇!但这仍然留下了一个更大的问题——为什么?我觉得这很奇怪。理解这个错误将有助于我将来避免它。非常感谢你,伙计!:)
[Table("MyNewTable")]