Невозможно определить информацию сериализации для "Выражения" - PullRequest
0 голосов
/ 07 мая 2019

Я получаю сообщение об ошибке Невозможно определить информацию сериализации для a => a.CurrentProcessingStep , когда я пытаюсь обновить свой документ.

Я использую драйвер Mongo .NET версии 2.8 и .NET Framework 4.7.2.

Я создаю фильтр и обновляю операторы с помощью помощников разработчика из библиотеки.

Вот соответствующий раздел моего класса документов:

    [BsonIgnoreExtraElements]
    [DebuggerDisplay("{Term}, Rule Status = {_ruleStatus}, Current Step = {_currentProcessingStep}")]
    public class SearchTermInfo : AMongoConnectedObject
    {
        [BsonElement("CurrentProcessingStep")]
        private ProcessingStep _currentProcessingStep;

        [BsonElement("RuleStatus")]
        private RuleStatus _ruleStatus;

        [BsonDateTimeOptions(Kind = DateTimeKind.Local)]
        public DateTime AddDateTime { get; set; }

        [BsonIgnore]
        [JsonIgnore]
        public ProcessingStep CurrentProcessingStep
        {
            get => _currentProcessingStep;
            set => AddHistoryRecord(value);
        }

        [BsonIgnore]
        [JsonIgnore]
        public RuleStatus RuleStatus
        {
            get => _ruleStatus;
            set => AddHistoryRecord(value);
        }

Я создаю фильтр с этим кодом:

FilterDefinition<SearchTermInfo> filter = Builders<SearchTermInfo>.Filter.And(
                Builders<SearchTermInfo>.Filter.Eq(a => a.Id, recordId),
                Builders<SearchTermInfo>.Filter.Or(
                    Builders<SearchTermInfo>.Filter.Eq(a => a.CurrentProcessingStep, currentStep),
                    Builders<SearchTermInfo>.Filter.Exists("CurrentProcessingStep", false)
                )
            );

Затем я выполняю обновление:

UpdateResult results =
                    searchTermInfoCollection.MongoCollection.UpdateOne(filter, update, null, cancellationToken);

и я получаю эту ошибку:

? ex
{"Unable to determine the serialization information for a => a.CurrentProcessingStep."}
    Data: {System.Collections.ListDictionaryInternal}
    HResult: -2146233079
    HelpLink: null
    InnerException: null
    Message: "Unable to determine the serialization information for a => a.CurrentProcessingStep."
    Source: "MongoDB.Driver"
    StackTrace: "   at MongoDB.Driver.ExpressionFieldDefinition`2.Render(IBsonSerializer`1 documentSerializer, IBsonSerializerRegistry serializerRegistry, Boolean allowScalarValueForArrayField)
    at MongoDB.Driver.SimpleFilterDefinition`2.Render(IBsonSerializer`1 documentSerializer, IBsonSerializerRegistry serializerRegistry)\r\n
    at MongoDB.Driver.OrFilterDefinition`1.Render(IBsonSerializer`1 documentSerializer, IBsonSerializerRegistry serializerRegistry)\r\n   
    at MongoDB.Driver.AndFilterDefinition`1.Render(IBsonSerializer`1 documentSerializer, IBsonSerializerRegistry serializerRegistry)\r\n   
    at MongoDB.Driver.MongoCollectionImpl`1.ConvertWriteModelToWriteRequest(WriteModel`1 model, Int32 index)\r\n   
    at System.Linq.Enumerable.<SelectIterator>d__5`2.MoveNext()\r\n   
    at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)\r\n   
    at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)\r\n   
    at MongoDB.Driver.Core.Operations.BulkMixedWriteOperation..ctor(CollectionNamespace collectionNamespace, IEnumerable`1 requests, MessageEncoderSettings messageEncoderSettings)\r\n   
    at MongoDB.Driver.MongoCollectionImpl`1.CreateBulkWriteOperation(IEnumerable`1 requests, BulkWriteOptions options)\r\n   
    at MongoDB.Driver.MongoCollectionImpl`1.BulkWrite(IClientSessionHandle session, IEnumerable`1 requests, BulkWriteOptions options, CancellationToken cancellationToken)\r\n   
    at MongoDB.Driver.MongoCollectionImpl`1.<>c__DisplayClass23_0.<BulkWrite>b__0(IClientSessionHandle session)\r\n   
    at MongoDB.Driver.MongoCollectionImpl`1.UsingImplicitSession[TResult](Func`2 func, CancellationToken cancellationToken)\r\n   
    at MongoDB.Driver.MongoCollectionImpl`1.BulkWrite(IEnumerable`1 requests, BulkWriteOptions options, CancellationToken cancellationToken)\r\n   
    at MongoDB.Driver.MongoCollectionBase`1.UpdateOne(FilterDefinition`1 filter, UpdateDefinition`1 update, UpdateOptions options, Func`3 bulkWrite)\r\n   
    at MongoDB.Driver.MongoCollectionBase`1.UpdateOne(FilterDefinition`1 filter, UpdateDefinition`1 update, UpdateOptions options, CancellationToken cancellationToken)\r\n   
    at SaFileIngestion.FileProcessorEngine.LockRecord(Int64 recordId, ProcessingStep currentStep, CancellationToken cancellationToken) 
    in D:\\[File Path]\\SaFileIngestion\\FileProcessorEngine.cs:line 195"
    TargetSite: {MongoDB.Driver.RenderedFieldDefinition`1[TField] Render(MongoDB.Bson.Serialization.IBsonSerializer`1[TDocument], MongoDB.Bson.Serialization.IBsonSerializerRegistry, Boolean)}

Я также пытался создать фильтр с помощью этого кода:

 Builders<SearchTermInfo>.Filter.Eq("CurrentProcessingStep", currentStep),

У меня сложилось впечатление, что я смогу построить выражение с использованием средства доступа к свойству, даже если оно помечено как BsonIgnore, поскольку личное поле было приписано атрибуту BsonElementAttribute с тем же именем, что и игнорируемое средство доступа к свойству.

Любое предоставленное руководство приветствуется.

Спасибо

...