MongoDb BsonClassMap

时间:2011-11-09 16:37:50

标签: c# mongodb mongodb-.net-driver database

我是MongoDb的新手,我目前正在使用CSharp驱动程序(1.2版)。使用BsonClass映射时出现问题。下面是我要执行的代码。我只是定义了一个我要映射到BsonDocument的自定义类型。

为了使用它,我正在利用BsonClassMap.RegisterClassMap()。当我点击foreach语句(尝试访问FinAs()结果中的第一个条目)时,我收到以下错误:

'无法从BsonType ObjectId反序列化Guid。'

根据我的理解,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 :(得分:0)

我怀疑您需要使用SetIdMember来识别您的ID字段。您没有使用ObjectId值代替Guids的任何特殊原因?

答案 1 :(得分:0)

事实证明,在开始使用BsonClassMap之前,我在我的集​​合中存储了一些其他文档。他们的ObjectId以MongoDB原生的格式存储....遗憾的是,这种格式无法解析为Guid。为了解决这个错误,我最终消灭了所有旧条目。