2017-02-27 102 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时,这是自动完成的。() –

相关问题