Overview
.NET SDK 支持三类数据类型:
要了解如何将特定数据类型映射到 App Services 模式中的 BSON 类型,请参阅 Atlas App Services 文档中的数据模型映射。
.NET 类型
Realm 支持以下 .NET 数据类型及其可为 null 的对应项:
boolbyteshortintlongfloatdoubledecimalcharstringbyte[]DateTimeOffset(注意: Realm会在将DateTimeOffset值存储到数据库之前,将其转换为 UTC,并且不会存储时区信息。有关更多信息,请参阅问题 #1835 。)GuidIList<T>,其中 T 是任何受支持的数据类型(请参阅列表)
注意
byte 、 char 、 short 、 int和long类型均作为 64 位整数值存储在 Realm 中。
MongoDB.Bson 类型
ObjectIdDecimal128
Guid 和 ObjectId 属性
MongoDB.Bson.ObjectId 是 MongoDB 特有的 12 字节唯一值,而内置 .NET 类型Guid是 16 字节通用唯一值。 这两种类型都是可索引的,并且都可以用主键。
使用十进制值
Realm 支持Decimal128 Bson 类型的 128 位十进制值。 定义十进制类型时,可以使用Decimal128 Bson 类型或 .NET decimal类型,即使它只是 96 位十进制。 SDK 会自动在两者之间进行转换,但可能会导致精度或范围丢失。 以下示例展示了如何同时使用Decimal128 Bson 类型和 .NET decimal类型:
public class MyClassWithDecimals { [] public ObjectId _id { get; } = ObjectId.GenerateNewId(); // Standard (96-bit) decimal value type public decimal VeryPreciseNumber { get; set; } // 128-bit Decimal128 public Decimal128 EvenMorePreciseNumber { get; set; } public Decimal128 AnotherEvenMorePreciseNumber { get; set; } // Nullable decimal or Decimal128 are supported, too public decimal? MaybeDecimal { get; set; } public Decimal128? MaybeDecimal128 { get; set; } public void DoDecimalStuff() { var myInstance = new MyClassWithDecimals(); // To store decimal values: realm.Write(() => { myInstance.VeryPreciseNumber = 1.234567890123456789M; myInstance.EvenMorePreciseNumber = Decimal128.Parse("987654321.123456789"); // Decimal128 has explicit constructors that take a float or a double myInstance.EvenMorePreciseNumber = new Decimal128(9.99999); }); } }
特定 Realm 类型
任何实现RealmObject或EmbeddedObject的类都可以包含RealmObject子类和/或嵌入式对象子类。 此外,Realm 支持以下自定义类型: