我有一个类产品存储有关产品的一些信息,并希望将其保存到我的Xamarin应用程序中的SQLite数据库中。无法从Xamarin应用程序中的SQLite数据库中删除
class Product
{
[PrimaryKey, AutoIncrement, Column("ID")]
public int ID { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public Product(string name, string category)
{
Name = name;
Category = category;
}
public Product()
{
}
}
在我的代码创建一个产品作为
Product s = new Product();
s.Name = some_name;
s.Category = some_category;
,并在我的数据库中插入:
var db = new SQLiteConnection(db_path);
var table = db.Table<Product>();
db.Insert(s);
的问题是,主键始终为0显然,当我尝试通过传递一个项目来删除表格中的一条记录
private void deleteThisProduct(Product item)
{
var db = new SQLiteConnection(db_path);
var table = db.Table<Product>();
var toDelete = table.Where(x => x.ID == item.ID).FirstOrDefault();
if (toDelete != null)
{
db.Delete(toDelete);
Toast.MakeText(this, "Delete Successfully", ToastLength.Short).Show();
}
else
{
Toast.MakeText(this, "Not Found", ToastLength.Short).Show();
}
}
无论我传递给删除函数的任何项目,toDelete始终为空,我的注释从数据库中删除记录。 奇怪的是,如果我的所有记录(类的Product)都有一个主键为0,我的Linq查询应该可以找到一些东西,但它总是返回一个空值。
我在做什么错?我的产品类是否是问题?谢谢。
只要是明确的,即使在上面的代码,我只是做:
db.Delete(item)
我无法从表中删除相关记录。
产品ID不能为0,因为这个字段被标记为PrimaryKey。创建一个方法来获取所有项目,因此你可以验证他们有什么Id。方法'deleteThisProduct()'你只能通过在productId'私人无效deleteThisProduct(int productId)',因为这是你正在使用的所有。 – apineda
这就是为什么我发现这一切都很奇怪。 ID设置不正确,这会在调用db.Delete() –