Ich habe eine Klasse Produkt, um einige Informationen über ein Produkt zu speichern und in einer SQLite DB in meiner Xamarin Anwendung zu speichern.Nicht in SQLite DB in Xamarin App löschen
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()
{
}
}
In meinem Code erstelle ich ein Produkt Objekt als
Product s = new Product();
s.Name = some_name;
s.Category = some_category;
und stecke in meiner DB durch:
var db = new SQLiteConnection(db_path);
var table = db.Table<Product>();
db.Insert(s);
Das Problem ist, dass der Primärschlüssel ist immer 0 offenbar und wenn Ich versuche, einen Datensatz in meiner Tabelle zu löschen, indem ich ein Element übergebe. Ich habe einen Nullpunkt
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();
}
}
Welches Element ich auch an die Löschfunktion übergebe, toDelete ist immer null und ich kann den Datensatz nicht aus der Datenbank löschen. Seltsam, wenn alle meine Datensätze (der Klasse Product) einen Primärschlüssel von 0 haben, sollte meine Linq-Abfrage etwas finden, aber es gibt immer eine Null zurück.
Was mache ich falsch? Ist meine Produktklasse das Problem? Vielen Dank.
Nur klar sein, auch wenn auf dem obigen Code ich einfach tun:
db.Delete(item)
ich nicht den dazugehörigen Datensatz aus der Tabelle entfernen kann.
Die Produkt-ID darf in der Tabelle nicht 0 sein, da dieses Feld als PrimaryKey markiert ist.Erstellen Sie eine Methode, um alle Elemente zu erhalten, und überprüfen Sie, welche ID sie haben.Methode 'deleteThisProduct()' können Sie nur übergeben in der productId 'private void deleteThisProduct (int productId)' als das ist alles, was Sie verwenden. – apineda
Deshalb finde ich das alles komisch. Die ID ist nicht richtig eingestellt und dies verursacht Probleme beim Aufruf von db.Delete() –