首页 > 解决方案 > Realm c#:如何添加 DynamicRealmObject?

问题描述

我在 c# (VS) 中设置了领域 (v10.3.0),它与经典静态对象 (继承 RealmObject) 配合得很好。现在我需要在运行时创建一个动态对象并考虑一下。像这样 :

RealmConfiguration config = new RealmConfiguration(realm_db_name);
config.SchemaVersion = 2;
config.ShouldDeleteIfMigrationNeeded = true;
config.IsDynamic = true;
                
var realm = Realm.GetInstance(config);

realm.Write(() =>
{

                    DynamicRealmObject tmp_obj = realm.DynamicApi.CreateObject("test", "time");

                    for (int min_idx = 0; min_idx < values.Length; min_idx++)
                    {
                        for (int col_idx = 0; col_idx < headers.Length - 1; col_idx++)
                        {
                            tmp_obj.DynamicApi.Set(headers[col_idx], double_values[col_idx,min_idx]);
                        } 

                        realm.Add(tmp_obj);

                    }
});

(headers 是带有标题名称的字符串 [],double_values 是带有值的二维双精度数组)

但是,我收到以下错误:

类测试不在此领域的有限类集中

我还尝试设置不同的架构版本(从 1 到 2),但没有任何改变。如果我捕捉到当前模式,它仍然拥有我之前使用的旧静态类。

有任何想法吗?

标签: c#.netrealm

解决方案


正如此处MongoDB 社区论坛所讨论的那样,不幸的是,无法按照您的意愿以编程方式创建模式。当前的动态 API 只能用于访问现有属性。

您尝试做的另一种方法可能是使用字典:

public class HeaderContainer : RealmObject
{
    public IDictionary<string, double> Headers { get; }
}

// Later...

realm.Write(() =>
{

    var container = realm.Add(new HeaderContainer());

    for (int min_idx = 0; min_idx < values.Length; min_idx++)
    {
        for (int col_idx = 0; col_idx < headers.Length - 1; col_idx++)
        {
            container.Headers[headers[col_idx]] = double_values[col_idx,min_idx];
        } 
    }
});


推荐阅读