使用mongodb3.6和.NetCore2.0,遵循 mongo-csharp-driver2.5文档。
我想为某些字段添加Bson唯一的地图序列化程序。就像在这里:
public class UserAccount : Person
{
[Required]
[**i want this to be unique also, like i set it required**]
public string Username { get; set; }
public string UserCode { get; set; }
}
我在文档中搜索它,也谷歌搜索它,但没有在C#中找到任何帮助(关于映射条款)。
答案 0 :(得分:1)
自定义序列化程序(检查Required
属性是否已填充)可以通过检查模型在客户端执行其工作。但是,检查文档属性的值是否唯一需要向数据库请求,该数据库将搜索具有此类属性值的文档。它会破坏模型序列化的性能,特别是如果请求的字段没有在MongoDB中编入索引。
这就是为什么我认为你不应该在模型序列化期间检查属性的唯一性。在文档插入尝试期间,应在MongoDB服务器端检查它。 MongoDB提供了Unique Indexes开箱即用的功能。您应该做的唯一事情是在相应的属性上创建一个唯一索引:
db.userAccounts.createIndex( { "UserName": 1 }, { unique: true } )
现在,如果您尝试插入具有重复属性值的文档,则会出现以下异常: