使用Guid字符串作为MongoDB主键时的查询报错问题
问题原因
MongoDB C#驱动默认会把标记[BsonId]的string类型字段解析为ObjectId(要求是24位十六进制字符串),但你的集合中_id是带连字符的UUID格式字符串(36位),驱动尝试将其转换为ObjectId时失败,抛出该错误。
解决方法
方式一:显式指定Id按字符串类型处理
修改POCO类的Id字段,添加[BsonRepresentation(BsonType.String)]特性,明确告诉驱动将_id作为字符串解析:
public class ProductCategory { [BsonId] [BsonRepresentation(BsonType.String)] public string Id { get; set; } [BsonElement("name")] public string Name { get; set; } }
方式二:改用Guid类型匹配UUID格式
因为你的_id是UUID格式,直接对应C#的Guid类型更契合,修改POCO类:
public class ProductCategory { [BsonId] public Guid Id { get; set; } [BsonElement("name")] public string Name { get; set; } }
这种方式下,驱动会自动完成UUID与Guid的双向转换,无需手动处理字符串格式。
验证
修改完成后重新执行查询代码,驱动就能正确识别_id类型,不会再抛出格式错误。
内容的提问来源于stack exchange,提问作者Sven
相关产品推荐
相关产品推荐

