2010-11-08 67 views
2

我正在用MongoDB和NoRM在C#中进行实验。Mongodb NoRM和POCO

从我读过的唯一标识Mongodb中文档的ObjectId来看,它是一种“特殊”的Guid(从某种意义上说是唯一的),但其中有一些重要的部分,允许更简单的排序和索引(时间戳,机器哈希,processId和增量)。

我想继续我的对象真的POCO与自动生成的GUID作为ID,以便在没有外部类型如的ObjectId会阻止我迁移到另一种技术或者回到经典Ado.net或NHibernate的东西。

另一种选择是在POCO的标识使用string和使用ObjectId.NewObjectId().ToString()

什么是它的最佳实践?

+0

为什么你会使用NoRM,它在几年内还没有更新,并说“不要使用这个,使用官方驱动程序”。 – 2016-07-09 04:58:22

回答

2

ObjectId不是guid。 Guid是MS为他们使用的UUID版本提供的名称。 ObjectIds是一种完全不同的算法。

话虽这么说,你可以使用任何你喜欢的,如蒙戈的ID,它不会有性能损失(在轨世界,几个奥姆斯的提倡用字符串)

的ObjectId使用在mongo中主要是为了节省大小。如果这是一笔大交易,只需使用别的东西,只要意识到使用不必要的大ID域最终会浪费内存。但如果这是一件大事,那就去Guids吧。

0

你可以使用任何你喜欢的类型作为_id,正如Matt所说的那样,它提供了它独特的集合。

在[DOC:BSON]类型中存储UUID是最有效的,但如果空间和速度不是问题,您也可以使用十六进制字符串。