请放心,我已经看到了同样问题的所有答案。 点击此链接enter switch-from-local-to-synced-realm
我有一个本地领域,我想从那里复制到同步领域。
public void InitiateSyncForPost()
{
realm = Realm.GetInstance(ConfigForSync);
//realm.WriteAsync((Realm obj) =>
//{
// var realmOld = Realm.GetInstance(Config);
// var ding = realmOld.All<Post>().ToList();
// var dang = realmOld.All<Comment>().ToList();
// var ting = realmOld.All<ImageData>().ToList();
// foreach (var t in dang)
// {
// obj.Add(t, false);
// }
// foreach (var t in ding)
// {
// obj.Add(t, false);
// }
//foreach (var t in ting)
// {
// obj.Add(t, false);
// }
//});
realm.Write(() => {
var realmOld = Realm.GetInstance(Config);
var ding = realmOld.All<Post>().ToList();
var dang = realmOld.All<Comment>().ToList();
var ting = realmOld.All<ImageData>().ToList();
realmOld.Dispose();
foreach (var t in ting)
{
realm.Add(t, true);
}
foreach (var t in dang)
{
realm.Add(t, true);
}
foreach (var t in ding)
{
realm.Add(t, true);
}
});
}
你可以看到我尝试了异步写和写方法。 两个都给我异常
当我使用WriteAsync时 我得到例外条件不符合数组长度== 1(不要记得)
当我使用当前代码时,我收到此异常
Realms.Exceptions.RealmObjectManagedByAnotherRealmException:当它已经被另一个领域管理时,无法开始管理具有领域的对象
我在将对象从本地域复制到同步域时有什么问题吗?
答案 0 :(得分:6)
在将添加到新领域之前,您需要创建RealmObject
子类的非托管副本。
您可以手动或通过辅助扩展程序执行此操作。
NonManagedCopy
的{{1}}分机( 1 ):RealmJson.Extensions
将RealmObject子类的每个属性分配给新实例化的非托管对象。
var nonSyncedRealm = Realm.GetInstance(nonSyncedRealmConfig);
var syncedRealm = Realm.GetInstance(syncedRealmConfig);
var nonSyncedAll = nonSyncedRealm.All<ARealmClass>();
syncedRealm.Write(() =>
{
foreach (var realmObject in nonSyncedAll)
{
var syncedObject = realmObject.NonManagedCopy<ARealmClass>();
syncedRealm.Add(syncedObject, true);
}
});
( 1 )免责声明syncedRealm.Write(() =>
{
foreach (var realmObject in nonSyncedAll)
{
var syncedObject = new ARealmClass
{
Id = realmObject.Id,
Name = realmObject.Name,
~~~~~~
~~~~~~
~~~~~~
~~~~~~
};
syncedRealm.Add(syncedObject, true);
}
});
是我撰写的扩展程序,可通过nuget包或来源获取: