SQLite.Net 更新生成错误“它没有 PK”

use*_*586 6 xamarin sqlite-net

我在使用 Xamarin 的 PCL 中使用 Lync 语法。

public class settings
{

    [PrimaryKey, AutoIncrement]
    public int ID { get; set; }

    public string user_name { get; set; }
    public string password { get; set; }
    public string server { get; set; }

}

void CreateTables()
{
    database.CreateTable<settings>();
}

void Insert()
{    
     settings s = new settings();
     s.server = "<none>"
     s.user_name = "";
     s.password = "";
     database.Insert(s)
}

void Update()
{
     settings s = database.Table<settings>().FirstOrDefault();
     s.server = server_address.Text;
     s.user_name = user_name.Text;
     s.password = pass.Text;
     database.Update(s)
}
Run Code Online (Sandbox Code Playgroud)

更新时我收到“无法更新设置:它没有 PK”,但插入工作正常。我在引用 SQLite.net 的 PCL 中使用 Xamarin。我是 SQlite 和 Xamarin 的新手,因此在询问更多详细信息时请详细说明。

更新 - 已解决

该类与我创建数据库对象实例的位置位于同一名称空间中。只需将“Sqlite”添加到我的属性中就可以解决这个非常奇怪的问题。

[SQLite.PrimaryKey, SQLite.AutoIncrement]
Run Code Online (Sandbox Code Playgroud)

小智 0

我已经在这个问题上储备了一个星期了,甚至上面的解决方案对我不起作用...我认为 ID 不会自动递增,这就是为什么它说:无法更新... 真正对我有用的是手动增加 P​​K (Id)...如下。

persons.Id++;
Run Code Online (Sandbox Code Playgroud)

在验证数据并将数据插入数据库的那一刻,我只需添加上述代码即可更新成功。

private async void Register_Student(object sender, EventArgs e){... ... 

if(!string.Equals(newPassword.Text, rePassword.Text)){ 

warningLabel.Text = "Enter same pwd"; ... 
}
else{ 

    persons.Id++; //solution that worked for me at insertion level
    persons.UserName = newUsername.Text; //Text entered by the user
    }...
} 
Run Code Online (Sandbox Code Playgroud)

谢谢...