我有一個類產品存儲有關產品的一些信息,並希望將其保存到我的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() –