如何获取RavenDB中对应实体的正确集合名称?
如何获取RavenDB中对应实体的正确集合名称?
嘿,这个问题我太熟悉了!RavenDB自动复数化实体名生成集合的机制,确实偶尔会让人在写查询的时候卡壳,不过有几个非常靠谱的方法能帮你精准拿到正确的集合名:
用RavenDB内置的命名规则方法(最推荐)
RavenDB本身提供了DocumentConventions.GetCollectionName方法,这就是它内部用来生成集合名的逻辑,完全和系统保持一致。不管是默认的复数化,还是你自定义了集合命名规则,它都能返回正确结果。
比如针对你的PhoneBook实体,代码可以这么写:// 假设你已经初始化了DocumentStore实例 var collectionName = documentStore.Conventions.GetCollectionName(typeof(PhoneBook)); // 这里拿到的就是"PhoneBooks"如果你手里有实体实例,也可以直接传实例进去:
var myPhoneBook = new PhoneBook(); var collectionName = documentStore.Conventions.GetCollectionName(myPhoneBook);自定义实体集合名(如果需要)
要是你不想用默认的复数化规则,想给某个实体指定专属的集合名,直接给实体类加CollectionName特性就行:[CollectionName("MySpecialPhoneBooks")] public class PhoneBook { // 你的实体属性 }这时候再调用
GetCollectionName方法,返回的就是你指定的这个自定义名称啦。RQL查询里的小技巧
如果你是在写RQL语句(比如你示例里的批量删除查询),除了提前拿到集合名代入,还可以用RavenDB的@collection占位符,不过本质上还是需要先获取正确的集合名传入参数,所以前面的方法才是基础。
用这些方法,就再也不用手动猜复数名啦,尤其是碰到像Person变People这种不规则复数的情况,完全能避免出错。
备注:内容来源于stack exchange,提问作者Stephan Steiner
相关产品推荐
相关产品推荐

