IdMemberMap имеет значение null, используя «Параметры сериализации представления» - PullRequest
4 голосов
/ 20 ноября 2011

Используя MongoDB, я хочу сохранить свою модель как можно более чистой, поэтому я решил придерживаться этого подхода: http://www.mongodb.org/display/DOCS/CSharp+Driver+Serialization+Tutorial#CSharpDriverSerializationTutorial-RepresentationSerializationOptions

У меня есть класс, как:

public class Person
{        
    public string Name { get; set; }        
    public string Id { get; set; }

    public Person()
    {

    }
    public Person(string name)
    {            
        this.Name = name;            
    }
}

А внутри application_start у меня

BsonClassMap.RegisterClassMap<Person>(x =>
{
   x.AutoMap();
   x.IdMemberMap.SetRepresentation(BsonType.ObjectId);
});

Но при запуске я получаю исключение нулевой ссылки на IdMemberMap. Может кто-нибудь сказать, пожалуйста, если что-то не так?

Ответы [ 2 ]

4 голосов
/ 22 ноября 2011

Это граничит с ошибкой в ​​драйвере C #. Оказывается, IdMemberMap не определяется до тех пор, пока карта классов не будет «заморожена», по причинам, связанным с иерархиями классов, в которых идентификатор может фактически быть определен в базовом классе. Один из способов обойти это:

BsonClassMap.RegisterClassMap<Person>(cm => {
    cm.AutoMap();
    cm.Freeze();
    cm.IdMemberMap.SetRepresentation(BsonType.ObjectId);
});

Еще один способ обойти это использовать GetMemberMap вместо IdMemberMap:

BsonClassMap.RegisterClassMap<Person>(cm => {
    cm.AutoMap();
    cm.GetMemberMap(c => c.Id).SetRepresentation(BsonType.ObjectId);
});
0 голосов
/ 19 марта 2014

Установить генератор идентификаторов вручную

Это отсутствует в документации , но вам нужно вручную установить генератор идентификаторов:

BsonClassMap.RegisterClassMap<Person>(cm =>
{
  cm.AutoMap();
  cm.IdMemberMap.SetRepresentation(BsonType.ObjectId);
  cm.IdMemberMap.SetIdGenerator(StringObjectIdGenerator.Instance);
}

Источник: https://groups.google.com/d/msg/mongodb-user/_pjCDXZ9hOk/9N23ARe0_rgJ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...