【发布时间】:2017-07-17 11:29:38
【问题描述】:
我有一个 Product 类来存储有关产品的一些信息,并希望将其保存到我的 Xamarin 应用程序中的 SQLite DB 中。
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 对象
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,当我尝试通过传递一个项目来删除表中的记录时,我有一个 null
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 查询应该会找到一些东西,但它总是返回 null。
我做错了什么?我的产品类是问题吗?谢谢。
为了清楚起见,即使在上面的代码中我只是这样做:
db.Delete(item)
我无法从表中删除关联的记录。
【问题讨论】:
-
表格中的Product Id不能为0,因为该字段被标记为PrimaryKey。创建一个方法来获取所有项目,这样您就可以验证他们拥有的 Id 是什么。方法
deleteThisProduct()你只能传入 productIdprivate void deleteThisProduct(int productId)因为这就是你所使用的。 -
这就是为什么我觉得这一切都很奇怪。 ID 设置不正确,这会在调用 db.Delete() 时产生问题
标签: c# linq sqlite xamarin xamarin.android