#readwise 
# Object Mapping - LiteDB :: A .NET Embedded NoSQL Database

## Metadata
- Author: [[litedb.org]]
- Full Title: Object Mapping - LiteDB :: A .NET Embedded NoSQL Database
- URL: http://www.litedb.org/docs/object-mapping/
## Highlights
- BsonMapper.ToDocument() auto converts each property of a class to a document field following these conventions:
- Properties can be read-only or read/write
- The class should have an `Id` property, `<ClassName>Id` property, a property with `[BsonId]` attribute or mapped by the fluent API.
- A property can be decorated with `[BsonIgnore]` in order not to be mapped to a document field
- A property can be decorated with `[BsonField("fieldName")]` to customize the name of the document field
- No circular references are allowed
- By default, max depth of 20 inner classes (this can be changed in the BsonMapper)
- You can use BsonMapper global instance (BsonMapper.Global) or a custom instance and pass to LiteDatabase in its constructor. Keep this instance in a single place to avoid re-creating the mappings each time you use a database.
- In addition to basic BSON types, BsonMapper maps others .NET types to BSON data type:  
- `Nullable<T>` are accepted. If value is null the BSON type is Null, otherwise the mapper will use `T?`.
- For IDictionary<K, T>, K key must be String or a simple type (convertible using Convert.ToString(..)).
| .NET type                  | BSON type |
| -------------------------- | --------- |
| Int16, UInt16, Byte, SByte | Int32     |
| UInt32 , UInt64            | Int64     |
| Single                     | Double    |
| Char, Enum                 | String    |
| ` IList<T>`,   `T[]`       | Array     |
| `IDictionary<K,T>`         | Document  |
| Any other .NET type        | Document  |