Я пытаюсь зарегистрировать пн 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