Realm c#:如何添加 DynamicRealmObject?

Realm c# : How to add DynamicRealmObject?

我在 c# (VS) 中设置了领域 (v10.3.0),它与 ​​classic static objects(继承 RealmObject)配合使用效果很好。现在我需要在运行时创建一个动态 object 并考虑某事。像这样:

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 是具有 header 名称的字符串[],double_values 是具有值的二维双精度数组)

但是,我收到以下错误:

The class test is not in the limited set of classes for this realm

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

有什么想法吗?

正如在 MongoDB 社区论坛 here 上讨论的那样,不幸的是,无法按照您的意愿以编程方式创建架构。当前动态 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];
        } 
    }
});