以下是有关我的开发环境的信息:
Microsoft Visual Studio Community 2015
.NET Framework 4.6
ASP.NET MVC程序集System.Web.Mvc Version = 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类:
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 DB连接管理器类的DAO C#类:
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类中的以下代码行:
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的使用空间,因为我认为我们需要使用MongoDB Annotations。但是,它仍未能解决问题。
有人可以告诉我如何纠正这个问题吗?
答案 0 :(得分:6)
您应该从模型中删除_id属性,因为它是由mongo生成的,您不需要自己添加它。此外,您可以使用除[BsonId]之外的[BsonElement]属性标记应包含在模型中的所有属性。
此外,您应该序列化和反序列化到您自己的模型而不是BsonDocument:
MongoCollection<UserModel> userDetails = database.GetCollection<UserModel>("Users");
userDetails.InsertOneAsync(um);
您正在创建自定义类并尝试在不进行任何转换的情况下获取和插入BsonDocument。如果你想直接使用BsonDocument,可以这样调用:
var umToBson = um.ToBsonDocument();
然后按照您的尝试插入它。