将 POCO 模型转换为 MongoDB 的 Bson 格式

converting the POCO Model into MongoDB's Bson format

我的开发环境信息如下:

微软 Visual Studio 社区 2015

.NET Framework 4.6

ASP.NET MVC 程序集System.Web.Mvc 版本=5.2.3.0

MongoDB.Driver 2.0.1.27

Mongodb 3.0.6

在我的 C# 应用程序中,我有以下检索 MongoDB 数据库引用的代码:

 public class MongoDBConnectionManager
 {

     public IMongoDatabase getMongoDB() {

            var client = new MongoClient("mongodb://localhost:27017");
            IMongoDatabase iMgDb = client.GetDatabase("foo");
            IMongoCollection<BsonDocument> UserDetails = 
            iMgDb.GetCollection<BsonDocument>("Users");
            return iMgDb;
     } // end of public IMongoDatabase getMongoDB()

  } // end of public class MongoDBConnectionManager

这是代表用户业务实体的 POCO class:

 using MongoDB.Bson.Serialization.Attributes;

 public class UserModel
 {

    public object _id { get; set; } //MongoDb uses this field as identity.

   [BsonId]
   public int ID { get; set; }

   [Required]
   [BsonRepresentation(MongoDB.Bson.BsonType.String)]
   public string UserName { get; set; }

   [Required]
   //[DataType(DataType.Password)]
   [BsonRepresentation(MongoDB.Bson.BsonType.String)]
   public string Password { get; set; }

   [Required]
   // [DataType(DataType.EmailAddress)]
   [BsonRepresentation(MongoDB.Bson.BsonType.String)]
   public string Email { get; set; }


   [BsonRepresentation(MongoDB.Bson.BsonType.String)]
   public string PhoneNo { get; set; }

   [BsonRepresentation(MongoDB.Bson.BsonType.String)]
   public string Address { get; set; }

 }

这是使用 Mongo 数据库连接管理器的 DAO C# class Class:

   public class DAO
   {

       public int insertNewUser(UserModel um)
       {
         MongoDBConnectionManager mgoDBCntMng = new MongoDBConnectionManager();
         IMongoDatabase database = mgoDBCntMng.getMongoDB();
         IMongoCollection <BsonDocument> UserDetails = database.GetCollection<BsonDocument>("Users");
         UserDetails.InsertOneAsync(um);

         return 0;
      }
  }

我面临的问题是 DAO 中的以下代码行 class:

  UserDetails.InsertOneAsync(um);

Visual Studio Community 2015 显示以下错误:

  cannot convert from 'UserModel' to MongoDB.Bson.BsonDocument

我认为该错误与以某种方式将 UserModel POCO 转换为 MongoDB 的 Bson 格式有关。因此,在我的 UserModel POCO 中,我使用了名为 MongoDB.Bson.Serialization.Attributes 的 space,因为我认为我们需要使用 MongoDB Annotations。但是还是没能解决问题。

有人可以告诉我如何解决这个问题吗?

您应该从模型中删除 _id 属性,因为它是由 mongo 生成的,您不需要自己添加。您还可以使用 [BsonElement] 属性标记应包含在模型中的所有属性,但 [BsonId] 除外。

另外你应该序列化和反序列化到你自己的模型而不是 BsonDocument :

MongoCollection<UserModel> userDetails = database.GetCollection<UserModel>("Users");
userDetails.InsertOneAsync(um);

您正在创建自定义 class 并尝试在不进行任何转换的情况下获取和插入 BsonDocument。如果你想直接使用 BsonDocument,你可以这样调用:

var umToBson = um.ToBsonDocument();

然后按照您的意愿插入。