C # гнездо упругий универсальный индекс создать - PullRequest
0 голосов
/ 24 октября 2018

У меня есть общий метод «Создать».Этот метод создаст индекс по универсальному типу.Но я получаю ошибки:

  1. Тип 'T' должен быть ссылочным типом, чтобы использовать его в качестве параметра 'T' в универсальном типе или методе 'MappingsDescriptor.Map.(Func, ITypeMapping>) '

  2. Тип' T 'должен быть ссылочным типом, чтобы использовать его в качестве параметра' T 'в универсальном типе илиметод 'ElasticClient.Index (T, Func, IIndexRequest>)'

    public void Create (T node) {
    if (! _elasticClient.IndexExists (_indexName) .Exists) {var indexSettings = =новый IndexSettings ();indexSettings.NumberOfReplicas = 1;indexSettings.NumberOfShards = 3;

            var createIndexDescriptor = new CreateIndexDescriptor(_indexName)
           .Mappings(ms => ms
                           .Map<T>(m => m.AutoMap())
                    )
            .InitializeUsing(new IndexState() { Settings = indexSettings })
            .Aliases(a => a.Alias(aliasName));
    
            var response = _elasticClient.CreateIndex(createIndexDescriptor);
        }
    
        _elasticClient.Index<T>(node, idx => idx.Index(_indexName));
    }
    

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Метод .Map<T>() в гнезде использует ограничение класса для T.Вам нужно добавить то же ограничение класса к вам: T.

public void Create<T>(T node)
    where T: class
{
    // your code here
}
0 голосов
/ 24 октября 2018

Попытайтесь добавить where T : class:

public void Create<T>(T node) where T : class
    {        
        if (!_elasticClient.IndexExists(_indexName).Exists)
        {
            var indexSettings = new IndexSettings();
            indexSettings.NumberOfReplicas = 1;
            indexSettings.NumberOfShards = 3;

            var createIndexDescriptor = new CreateIndexDescriptor(_indexName)
           .Mappings(ms => ms
                           .Map<T>(m => m.AutoMap())
                    )
            .InitializeUsing(new IndexState() { Settings = indexSettings })
            .Aliases(a => a.Alias(aliasName));

            var response = _elasticClient.CreateIndex(createIndexDescriptor);
        }

        _elasticClient.Index<T>(node, idx => idx.Index(_indexName));
    }
}

Я решил мою проблему, которую я имел, пожалуйста, смотрите ниже.

...