我试过这个我创建的方法,但它提示我一个错误:
Realms.RealmInvalidObjectException:此对象已分离。它是从领域中删除的吗?'
public void deleteFromDatabase(List<CashDenomination> denom_list)
{
using (var transaction = Realm.GetInstance(config).BeginWrite())
{
Realm.GetInstance(config).Remove(denom_list[0]);
transaction.Commit();
}
}
在C#编码类型中从域中删除数据库的正确编码是什么?
答案 0 :(得分:2)
你正在以正确的方式做到这一点。您收到的错误消息表明该对象已被删除。你确定它仍然存在于领域吗?
<强>更新强>
我决定更新这个答案,因为我对其他答案的评论有点难以阅读。
您的原始代码应该可以正常工作。但是,如果您希望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();
}
}
答案 1 :(得分:1)
public void deleteFromDatabase(Realm realm, long cashDenominatorId)
{
realm.Write(() =>
{
var cashDenominator = realm.All<Person>().Where(c => c.Id == cashDenominatorId);
Realm.RemoveRange<CashDenomination>(((RealmResults<CashDenomination>)cashDenominator));
});
}
你可以称之为
Realm realm = Realm.GetInstance(config);
var denom_list = ...
// ...
deleteFromDatabase(realm, denom_list[0].id);
答案 2 :(得分:1)
我已经使用了这个代码:)感谢@EpicPandaForce的答案。
git push -n
它现在正毫无例外地删除我的数据:)