Не могу зарегистрироваться Mon go Mapping - PullRequest
1 голос
/ 19 января 2020

Я пытаюсь зарегистрировать пн go отображение. Я хочу заполнить ApplicationUser для каждой извлеченной статьи. Я сохраняю значение CreatedByUserId в mon go db и хочу извлечь этот идентификатор для преобразования в относительный ApplicationUser. У меня есть сериализатор:

 public class AppUserSerializer: BsonClassMapSerializer<ApplicationUser>
    {
        private readonly IUnitOfWork _uOw;

        public AppUserSerializer(IUnitOfWork uow) 
            :this(new BsonClassMap<ApplicationUser>(), uow)
        {
        }

        public AppUserSerializer(BsonClassMap bsonClassMap, IUnitOfWork uow)
            :base(bsonClassMap)
        {
            _uOw = uow;
        }

        public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, ApplicationUser value)
        {
            //base.Serialize(context, args, value);
        }

        public override ApplicationUser Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
        {
            var userId = context.Reader.ReadString();
            var user = default(ApplicationUser);

            if (string.IsNullOrEmpty(userId))
            {
                user = _uOw.Users.Get(u => u.Id == userId)
                    .FirstOrDefault();
            }

            return user;
        }
    }

И затем я пытаюсь зарегистрировать его:

public static void Initialize(IUnitOfWork uOw)
        {
            BsonClassMap.RegisterClassMap<Article>(map =>
            {
                map.AutoMap();
                map.MapProperty(x => x.CreatedByUser).SetSerializer(new AppUserSerializer(uOw));
            });
        }

Схема статьи выглядит следующим образом:

[BsonIgnoreExtraElements]
    public class Article : BaseEntity
    {
        public Article()
        {

        }

        [BsonElement]
        public string LandingHeader { get; set; }

        [BsonElement]
        public string Header { get; set; }

        [BsonElement]
        public string PreviewText { get; set; }

        [BsonElement]
        public string FullText { get; set; }

        [BsonElement("CreatedByUserId")]
        public ApplicationUser CreatedByUser { get; set; }

        [BsonElement]
        public File Logo { get; set; }

        [BsonElement]
        public File[] ArticleFiles { get; set; }

        public override string CollectionName => "articles";
    }

При вызове метода Initialize я получаю следующее исключение, которое неясно:

ArgumentException: Карта классов не заморожена. Имя параметра: classMap

...