MongoDB学习(翻译6)
接上篇。。。。
字段或属性层次的序列化选项
有许多种让你控制序列化的方式,上一节通过约定方法来控制序列化,你也可以通过代码配置或者成员映射或者使用特性来控制你的序列化,下面说道的序列化的各个方面,我们都会展示两种方式。
Opt-In
大多数类会使他们的属性自动映射,有一些情况下,不会出现这种情形,例如,如果你的属性是只读的,那么它便不会加入到自动映射的队列中,为了包含该只读属性,你可以使用BsonElementAttribute
public class MyClass {
private readonly string _someProperty;
[BsonElement]
public string SomeProperty
{
get { return _someProperty; }
}
}
也可以不使用特性而是下面的初始化代码实现同样的结果:
BsonClassMap.RegisterClassMap<MyClass>(cm => {
cm.MapProperty(c => c.SomeProperty);
});
注意:
当只读属性被序列化后,它的值会持久化到数据库,并不会被读出来
Element name元素名称
指定元素名称使用特性BsonElement:
public class MyClass {
[BsonElement("sp")]
public string SomeProperty { get; set; }
}
也可以不使用特性而是下面的初始化代码实现同样的结果:
BsonClassMap.RegisterClassMap<MyClass>(cm => {
cm.AutoMap();
cm.GetMemberMap(c => c.SomeProperty).SetElementName("sp");
});
注意:我们是第一次对类进行了自动映射,然后覆写类中某一个块,如果我们不先调用AutoMap 那么GetMemberMap就会因为没有成员映射而抛出异常。
Element Order
如果你想精确控制BSON文档中的元素的顺序,你可以使用BsonElement特性的Order 命名参数:
public class MyClass {
[BsonElement("sp", Order = )]
public string SomeProperty { get; set; }
}
或者使用下面代码来替代特性方式:
BsonClassMap.RegisterClassMap<MyClass>(cm => {
cm.AutoMap();
cm.GetMemberMap(c => c.SomeProperty).SetElementName("sp").SetOrder();
});
任何显示使用Order 的字段或者属性序列化会发生在不用Order 之前
设置ID字段或属性
设置类的哪一列是ID列或者属性你可以这样做:
public class MyClass {
[BsonId]
public string SomeProperty { get; set; }
}
或者使用下面代码来替代特性方式:
BsonClassMap.RegisterClassMap<MyClass>(cm => {
cm.AutoMap();
cm.SetIdMember(cm.GetMemberMap(c => c.SomeProperty));
});
当不适用自动映射时,你也可以按照下面的方式来指定ID字段或者属性:
BsonClassMap.RegisterClassMap<MyClass>(cm => {
cm.MapIdProperty(c => c.SomeProperty);
// mappings for other fields and properties
});
注意:
默认的约定,会发现公共属性或字段名称“Id”, “id”, or “_id”,所以没有必要为这个字段使用显示的特性或者映射
为id字段或属性选择IdGenerator(生成器)
当插入一个文档时,C#驱动会检查是否给Id成员赋值,如果没有,它会给这个字段或属性生成一个唯一的值,由于Id成员可以是任何类型,所以驱动需要一个匹配的IdGenerator 的帮助来检查这个是否已经赋值,如果没会生成值。驱动内置了一下几个IdGenerators :
- BsonObjectIdGenerator
- CombGuidGenerator
- GuidGenerator
- NullIdChecker
- ObjectIdGenerator
- StringObjectIdGenerator
- ZeroIdChecker<T>
有些IdGenerators 用于产生某些通用的Id类型
- BsonObjectIdGenerator 用于 BsonObjectId
- GuidGenerator 用于 Guid
- ObjectIdGenerator用于 ObjectId
- StringObjectIdGenerator 用于字符串类型的 ObjectId
可以这样为你的Id字段或属性选择IdGenerator :
public class MyClass {
[BsonId(IdGenerator = typeof(CombGuidGenerator))]
public Guid Id { get; set; }
}
或者使用下面代码来替代特性方式:
BsonClassMap.RegisterClassMap<MyClass>(cm => {
cm.AutoMap();
cm.IdMemberMap.SetIdGenerator(CombGuidGenerator.Instance);
});
如果说所有的Guids你都用CombGuidGenerator 生成,你可以这样写:
BsonSerializer.RegisterIdGenerator(
typeof(Guid),
CombGuidGenerator.Instance
);
NullIdChecker 和ZeroIdChecker<T> Id生成器是用于当您不存在一个IdGenerator 为您生成Id是但你想强制Id不为null或者0.
BsonSerializer.UseNullIdChecker = true; // used for reference types BsonSerializer.UseZeroIdChecker = true; // used for value types
最近有点忙了,一点一点来吧,今天先这么多,明天继续。。。
MongoDB学习(翻译6)的更多相关文章
- MongoDB学习3
MongoDB学习(翻译3) 支持的where字句(比较多,今天先写一部分) 本节介绍支持的where字句 正如前面提到的,不是所有的C#表达式都支持where子句.您可以以此文为指导,或者你可以 ...
- MongoDB学习2
MongoDB学习(翻译2) C#驱动之LINQ教程 介绍 本教程涵盖了1.8发布版本对linq查询的支持. 开始本教程之前,你应该至少阅读下C#驱动教程关于C#驱动的介绍 快速开始 首先,添加下面命 ...
- MongoDB学习笔记二- Mongoose
MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...
- MongoDB学习笔记系列
回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...
- MongoDB学习笔记—Linux下搭建MongoDB环境
1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...
- Mongodb学习笔记一(Mongodb环境配置)
Mongodb学习 说明: MongoDB由databases组成,database由collections组成,collection由documents组成,document由fileds组成.Mo ...
- MongoDB学习记录
一.操作符 "$lt" :"<""$lte" :"<=""$gt" :"> ...
- PHP操作MongoDB学习笔记
<?php/*** PHP操作MongoDB学习笔记*///*************************//** 连接MongoDB数据库 **////*************** ...
- MongoDB学习:(二)MongoDB简单使用
MongoDB学习:(二)MongoDB简单使用 MongoDB使用: 执行mongodb的操作之前,我们需要运行命令,来进入操作命令界面 >mongo 提示该错误,说明我们系统缺少一个补丁,该 ...
- MongoDB学习:(一)MongoDB安装
MongoDB学习:(一)MongoDB安装 MongoDB介绍: 直接百科了: MongoDB安装: 1:下载安装: MongoDB安装:https://www.mongodb.com/do ...
随机推荐
- linux_shell_获取日期相关
shell里直接调用系统变量 获取当天日期`date +%Y%m%d` 获取昨天日期`date -d yesterday +%Y%m%d` 获取前天日期`date -d -2day +%Y%m%d` ...
- C#-TextBox-登录表单password无形---ShinePans
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- PHP和MySQL Web开发 原书第4版 高清文字版,有目录,附带源码
PHP和MySQL Web开发 原书第4版:http://yunpan.cn/QCWIS25zmYTAn 提取码 fd9b PHP和MySQL Web开发 原书第4版源码:http://yunp ...
- 从久负盛名的GoDaddy开发革命来看Node.js的风靡程度
英文原文连接:http://venturebeat.com/2015/02/09/godaddy-nodejitsu/ 网站主机托管公司GoDaddy将要进一步通过新的开发工具来提升自身能力.最新消息 ...
- .NET源代码的内部排序实现
使用JetBrains的DotPeek工具能够方便地查看.net的部分源代码.于是看了一下.NET的内部是怎样实现排序的算法. 在System.Collections.Generic 命名空间下能够看 ...
- selenium2入门 用testNG对百度首页输入框进行测试 (三)
如果还没有安装testNG的亲,可以点击http://www.cnblogs.com/milanmi/p/4346580.html查看安装过程. 这节主要是对百度首页的输入框进行输入测试. packa ...
- 日志之再说Log4J
网上关于LOG4J的使用文章太多了,写这篇文章的目的一方面是为了回顾LOG4J的用法,一方面针对配置的使用自动将日志插入数据库,自动发送邮件,还有就是自定义输入实现.后续文章会总结下从LOG4J到LO ...
- 浅谈我对几个Web前端开发框架的比较
强调一下,这篇日志主要还是针对想学前端开发的新朋友写的,不是说我有什么独特见解,而是比较客观的状态,就各种框架的异同和应用场合,需要注意的地方做简单描述,不做具体深入分析,有的地方比较抽象,对于抽象之 ...
- Just a complaint about the college examinations
Well , you know. As a college student who want to find a good job after graduating like me , scores ...
- [翻译]初识SQL Server 2005 Reporting Services Part 1
原文:[翻译]初识SQL Server 2005 Reporting Services Part 1 构建和部署基本报表 如果曾经存在一项工作使得“真正的”开发者给他的上司泡蘑菇,那就是构建报表.毕竟 ...