作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用的是 MongoDB C# 驱动程序版本 2.11.0。我知道过去每个驱动程序如何不同地处理 GUID,现在有一个通用标准。出于向后兼容性的原因,默认情况下在 C# 驱动程序中不使用它。当前的建议似乎是在序列化程序上设置 GuidRepresentation。全局或单独为每个映射的 Guid 属性。
没关系,我面临的问题是对集合的查询不遵守序列化设置,只有在使用已弃用的 MongoDefaults 设置时才能正常工作。使用正确的 GuidRepresentation 正确存储文档,但查询似乎尝试匹配 CSUUID 而不是 UUID,因此它永远不会与数据库中的文档匹配。
这是一个基本的类映射:
public static void RegisterClassMaps()
{
BsonClassMap.RegisterClassMap<Widget>(cm =>
{
cm.MapIdProperty(w => w.Id)
.SetSerializer(new GuidSerializer(GuidRepresentation.Standard));
cm.MapProperty(w => w.ParentId)
.SetSerializer(new GuidSerializer(GuidRepresentation.Standard));
cm.MapProperty(w => w.Name);
}
}
这是一个匹配 Guid 和字符串的简单查询。以下方法将始终返回 null,因为它使用 CSUUID 而不是 UUID 构建查询。
private readonly IMongoCollection<Widget> _collection;
public async Task<Widget> FindByNameAsync(Guid parentId, string name)
{
var query = _collection.Find(w =>
w.ParentId == parentId &&
w.Name = name);
return await query.SingleOrDefaultAsync();
}
使用 AsQueryable() 而不是 Find() 具有相同的结果。两者都使用 CSUUID 而不是 UUID 构建查询。
BsonSerializer.RegisterSerializer(new GuidSerializer(GuidRepresentation.Standard));
如果我更改已弃用的 MongoDefaults 属性的值,则一切正常。
MongoDefaults.GuidRepresentation = GuidRepresantion.Standard;
我是否缺少有关如何构建查询的信息?我宁愿避免弃用的设置。
最佳答案
有同样的问题。
根据 http://mongodb.github.io/mongo-csharp-driver/2.11/reference/bson/guidserialization/guidrepresentationmode/guidrepresentationmode/
您需要配置 GuidRepresentationMode 直到将来默认为 V3
BsonDefaults.GuidRepresentationMode = GuidRepresentationMode.V3;
关于c# - 使用 GuidRepresentation.Standard GuidSerializer 执行查询时 MongoDB C# 驱动程序出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63443445/
我使用的是 MongoDB C# 驱动程序版本 2.11.0。我知道过去每个驱动程序如何不同地处理 GUID,现在有一个通用标准。出于向后兼容性的原因,默认情况下在 C# 驱动程序中不使用它。当前的建
我是一名优秀的程序员,十分优秀!