我有这个类Cart_Record,如下所示。我想更新PrimaryKey。为此,我尝试将对象克隆到新对象中以复制CartLines并更新ID。我没有在问题队列或文档中找到太多帮助我。
public class Cart_Record : RealmObject
{
public Cart_Record() { }
public Cart_Record(IList<Cart_Line> cartLines, int id)
{
ID = id;
foreach (var cartLine in cartLines)
CartLines.Add(App.RealmDB.Find<Cart_Line>(cartLine.ProductId));
}
[PrimaryKey]
public int ID { get; set; }
public IList<Cart_Line> CartLines { get; }
}
我正在尝试这个
var appCart = App.RealmDB.All<Cart_Record>().First();
App.RealmDB.Write(() =>
{
var cartLines = new List<Cart_Line>(appCart.CartLines);
App.RealmDB.Remove(App.RealmDB.Find<Cart_Record>(appCart.ID));
App.RealmDB.Add<Cart_Record>(new Cart_Record(cartLines, serverCart.ID));
});
但是我不断获得异常,特别是RealmObjectManagedByAnotherRealmException。我不明白为什么我没有将Cart_Line对象读取到Realm,只读到新对象中的CartLine列表。
我做错了什么?
提前谢谢。
编辑:我发现了一些有效的东西,但我想看看其他人是否有更好的方法。这对我有用。
var appCart = App.RealmDB.All<Cart_Record>().First();
App.RealmDB.Write(() =>
{
var cartLines = new List<Cart_Line>(appCart.CartLines);
App.RealmDB.Remove(App.RealmDB.Find<Cart_Record>(appCart.ID));
var newAppCart = App.RealmDB.Add<Cart_Record>(new Cart_Record() { ID = serverCart.ID });
foreach (var cartLine in cartLines)
newAppCart.CartLines.Add(cartLine);
});
答案 0 :(得分:1)
我不确定App.RealmDB
幕后的内容,但是使用开箱即用的Realm API,您可以通过简单地将CartLines从原始版本添加到更新的对象:
// Assume want to change Id from 1 to 2
var realm = Realm.GetInstance();
var original = realm.Find<Cart_Record>(1);
var updated = new Cart_Record { ID = 2 }; // other properties must be copied here
foreach (var cart in original.CartLines)
{
updated.CartLines.Add(cart);
}
realm.Write(() =>
{
realm.Remove(original);
realm.Add(updated);
});
// updated now has all the original's CartLines