你做对了。您收到的错误消息表明该对象已被删除。你确定它还在领域中吗?
更新:
我决定更新这个答案,因为我对另一个答案的评论有点难以阅读。
您的原始代码应该可以正常工作。但是,如果您希望 deleteFromDatabase 接受带有 CashDenomination 实例的列表,这些实例要么已被删除,要么可能从未添加到领域,您需要添加一个检查。此外,请注意您应该保留您的 Realm 实例并在您创建的事务中使用它。在大多数情况下,您希望将其保留更长时间,尽管通过GetInstance 获取它的开销很小。
public void deleteFromDatabase(List<CashDenomination> 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();
}
}
现在,如果你想使用标识符,你可以像你一样查找它,但仍然只使用Remove:
public void deleteFromDatabase(int denom_id)
{
var realm = Realm.GetInstance(config);
var denom = realm.All<CashDenomination>().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();
}
}
最后,如果您的CashDenomination 将denom_id 标记为PrimaryKey,您可以这样查找:
public void deleteFromDatabase(int denom_id)
{
var realm = Realm.GetInstance(config);
var denom = realm.ObjectForPrimaryKey<CashDenomination>(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();
}
}