2017-02-27 99 views
1

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

我無法從表中刪除相關記錄。

+0

產品ID不能爲0,因爲這個字段被標記爲PrimaryKey。創建一個方法來獲取所有項目,因此你可以驗證他們有什麼Id。方法'deleteThisProduct()'你只能通過在productId'私人無效deleteThisProduct(int productId)',因爲這是你正在使用的所有。 – apineda

+0

這就是爲什麼我發現這一切都很奇怪。 ID設置不正確,這會在調用db.Delete() –

回答

0

您是否嘗試過保存您的產品類在Product.cs:`

[Serializable()] 
    public class Product 
{ 
    [PrimaryKey, AutoIncrement] 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string Category { get; set; }` 
} 

,並在創建表:

「CREATE TABLE產品(ID INTEGER PRIMARY KEY,....

+0

產品已經在Product.cs中時產生問題。我沒有做的唯一的事情是在開頭 –

+0

加入[Serializable()],你是否聲明瞭db字段作爲表定義中的主鍵? – user1230268

+0

是的。當我將我的Product類傳遞給db.CreateTable時,這是自動完成的。() –

相關問題