2017-02-27 9 views
1

製品に関する情報を保存するクラス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で:

+0

このフィールドはPrimaryKeyとしてマークされているので、テーブル内でProduct Idを0にすることはできません。すべてのアイテムを取得するメソッドを作成し、そのIDが何であるかを確認できます。メソッド 'deleteThisProduct()' productIdの 'private void deleteThisProduct(int productId)'のように、これはあなたが使用しているすべてのものです。 – apineda

+0

それが私がこの奇妙なことをすべて見つける理由です。 IDが正しく設定されていないため、db.Delete()を呼び出すときに問題が発生します。 –

答えて

0

あなたはProduct.csであなたのProductクラスを保存しようとした持って

「TABLE製品(ID INTEGER PRIMARY KEYを、CREATE ....

+0

Productは既にProduct.csにあります。私がしなかった唯一のことは、最初に[Serializable()]を追加することです –

+0

テーブル定義の主キーとしてdbフィールドを宣言しましたか? – user1230268

+0

はい。これは、私のProductクラスをdb.CreateTableに渡すと自動的に行われます() –

関連する問題