MongoDb BsonClassMap - PullRequest
       10

MongoDb BsonClassMap

2 голосов
/ 09 ноября 2011

Я новичок в MongoDb и в настоящее время использую драйверы CSharp (версия 1.2).Мои проблемы возникают при использовании карты BsonClass.Ниже приведен код, который я пытаюсь выполнить.Я просто определил пользовательский тип, который я хотел бы отобразить в BsonDocument.

Чтобы использовать это, я использую BsonClassMap.RegisterClassMap ().Когда я нажимаю на оператор foreach (пытаясь получить доступ к первой записи в результатах FinAs ()), я получаю следующую ошибку:

'Невозможно десериализовать Guid из BsonType ObjectId.'

Из того, что японимать, что BsonClassMap использует GuidGenerator для объектов типа Guid.Почему я получаю эту ошибку?

Обратите внимание, что вставка выполняется без ошибок ... и после выполнения вставки newEmployee имеет идентификатор EmployeeId, который был автоматически сгенерирован для него.

Воткод, который я пытаюсь запустить:

     class Program{

        static void Main(string[] args){

            MongoServer server = MongoServer.Create();

            MongoDatabase dataBase = server.GetDatabase("test");

            MongoCollection<Employee>employees = dataBase.GetCollection<Employee>("employees");



            BsonClassMap.RegisterClassMap<Employee>(cm =>
                                                    {
                                                        cm.MapProperty(c => c.Name);
                                                        cm.MapProperty(c => c.Email);
                                                        cm.MapIdProperty(c => c.EmployeeId);
                                                    });

            var newEmployee = new Employee{ Name="Test", Email="test@test.com"}; 

            employees.Insert(newEmployee);

            foreach(Employee e in employees.FindAs<Employee>(Query.EQ("Name","Test")){

                Console.Writeline(e.Name);

            }

        }
     }

     public class Employee
     {
         public Guid EmployeeId {get;set;}
         public string Name {get;set;}
         public string Email {get;set;}
     }

Ответы [ 2 ]

0 голосов
/ 19 мая 2015

Оказывается, в моей коллекции было несколько дополнительных документов, прежде чем я начал использовать BsonClassMap. Их ObjectId был сохранен в формате, встроенном в MongoDB .... к сожалению, этот формат не может быть проанализирован в Guid. Чтобы исправить ошибку, я уничтожил все старые записи.

0 голосов
/ 09 ноября 2011

Я подозреваю, что вам нужно использовать SetIdMember для идентификации вашего поля идентификатора. По какой-то конкретной причине вы не используете значения ObjectId вместо направляющих?

...