C# - how to delete row in realm - android xamarin

前端 未结 3 459
暖寄归人
暖寄归人 2021-01-28 10:35

i tried this method that I created but it prompts me an error:

Realms.RealmInvalidObjectException:This object is detached. Was it deleted from the realm?\'

3条回答
  •  青春惊慌失措
    2021-01-28 11:10

    You are doing it the right way. The error message you are getting indicates that the object was removed already. Are you sure it still exists in the realm?

    UPDATE:

    I decided to update this answer because my comment on the other answer was a bit hard to read.

    Your original code should work fine. However, if you want deleteFromDatabase to accept lists with CashDenomination instances that either have been removed already or perhaps were never added to the realm, you would need to add a check. Furthermore, note that you should hold on to your Realm instance and use it in the transaction you created. In most cases, you want to keep it around even longer, though there is little overhead to obtaining it via GetInstance.

    public void deleteFromDatabase(List denom_list)
    {
        if (!denom_list[0].IsValid) // If this object is not in the realm, do nothing.
            return;
    
        var realm = Realm.GetInstance(config);
        using (var transaction = realm.BeginWrite())
        {
            realm.Remove(denom_list[0]);
            transaction.Commit();
        }
    }
    

    Now, if you want to use identifiers, you could look it up like you do, but still just use Remove:

    public void deleteFromDatabase(int denom_id)
    {
        var realm = Realm.GetInstance(config);
    
        var denom = realm.All().FirstOrDefault(c => c.denom_id == denom_id);
        if (denom == null)  // If no entry with this id exists, do nothing.
            return;
    
        using (var transaction = realm.BeginWrite())
        {
            realm.Remove(denom);
            transaction.Commit();
        }
    }
    

    Finally, if your CashDenomination has denom_id marked as PrimaryKey, you could look it up like this:

    public void deleteFromDatabase(int denom_id)
    {
        var realm = Realm.GetInstance(config);
    
        var denom = realm.ObjectForPrimaryKey(denom_id);
        if (denom == null)  // If no entry with this id exists, do nothing.
            return;
    
        using (var transaction = realm.BeginWrite())
        {
            realm.Remove(denom);
            transaction.Commit();
        }
    }
    

提交回复
热议问题