製品に関する情報を保存するクラスProductがあり、これをXamarinアプリケーションのSQLite DBに保存したいと思います。私のコードで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 s = new Product();
s.Name = some_name;
s.Category = some_category;
としてProductオブジェクトを作成して、で、私のDBに挿入します。
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はnullで、DBからレコードを削除することはできません。 奇妙なことに、(Productクラスの)すべてのレコードにプライマリキーが0の場合、Linqクエリは何かを見つけるはずですが、常にnullを返します。
私は間違っていますか?私のProductクラスは問題ですか?ありがとう。
ただ、I上記のコードであっても、明確にするだけで実行します。
db.Delete(item)
私はテーブルから関連するレコードを削除することはできません。 `
[Serializable()]
public class Product
{
[PrimaryKey, AutoIncrement]
public int ID { get; set; }
public string Name { get; set; }
public string Category { get; set; }`
}
とCREATE TABLEで:
このフィールドはPrimaryKeyとしてマークされているので、テーブル内でProduct Idを0にすることはできません。すべてのアイテムを取得するメソッドを作成し、そのIDが何であるかを確認できます。メソッド 'deleteThisProduct()' productIdの 'private void deleteThisProduct(int productId)'のように、これはあなたが使用しているすべてのものです。 – apineda
それが私がこの奇妙なことをすべて見つける理由です。 IDが正しく設定されていないため、db.Delete()を呼び出すときに問題が発生します。 –