类 Realm
一个 Realm 实例(也称为 Realm)代表一个 Realm 数据库。
警告:未冻结的 Realm 实例不是线程安全的,也不能跨线程共享。 您必须在要与 Realm 交互的每个线程上调用GetInstance(RealmConfigurationBase?) 。
implements
命名空间: Realms
程序集:Realm.dll
语法
public class Realm : IDisposable
属性
| 编辑本页 查看源代码配置
获取控制此 Realm 路径和其他设置的RealmConfigurationBase 。
声明
public RealmConfigurationBase Config { get; }
属性值
类型 | 说明 |
---|---|
RealmConfigurationBase | Realm 的配置。 |
DynamicApi
获取一个包含此 Realm 实例的动态 API 的对象。
声明
[Preserve]
public Realm.Dynamic DynamicApi { get; }
属性值
类型 | 说明 |
---|---|
Realm 。动态 | 包装此 Realm 的Realm.Dynamic实例。 |
IsClosed
获取一个值,该值指示是否已通过Dispose()关闭实例。 如果为true
,则不应在该实例上调用方法。
声明
public bool IsClosed { get; }
属性值
类型 | 说明 |
---|---|
bool |
|
IsFrozen
获取一个值,该值指示此 Realm 是否已冻结。 冻结 Realm 是不可变的,并且在写入数据库时不会更新。 与活动 Realm 不同,冻结 Realm 可以跨线程使用。
声明
public bool IsFrozen { get; }
属性值
类型 | 说明 |
---|---|
bool |
|
IsInTransaction
获取一个值,该值指示是否存在与此 Realm 关联的活动写事务。
声明
public bool IsInTransaction { get; }
属性值
类型 | 说明 |
---|---|
bool |
|
另请参阅
| 编辑本页 查看源代码架构
获取描述可存储在此 Realm 中的所有类型的 RealmSchema 实例。
声明
public RealmSchema Schema { get; }
属性值
类型 | 说明 |
---|---|
Realm 模式 | Realm 的模式。 |
订阅
获取表示此 Realm 的活动订阅的 SubscriptionSet 。
声明
public SubscriptionSet Subscriptions { get; }
属性值
类型 | 说明 |
---|---|
SubscriptionSet | 包含服务器用于决定哪些对象与本地 Realm 同步的查询订阅的 SubscriptionSet 。如果 Realm 不是使用FlexibleSyncConfiguration创建的,则会抛出NotSupportedException 。 |
异常
类型 | 条件 |
---|---|
NotSupportedException | 如果尚未使用FlexibleSyncConfiguration打开 Realm,则抛出该异常。 |
SyncSession
声明
public Session SyncSession { get; }
属性值
类型 | 说明 |
---|---|
会话 | 如果 Realm 实例是使用 FlexibleSyncConfiguration 或 PartitionSyncConfiguration 创建的,则负责与 MongoDB Atlas 同步的 会话 。如果这是本地 Realm 或内存 Realm,则会抛出NotSupportedException 。 |
异常
类型 | 条件 |
---|---|
NotSupportedException | 如果未使用FlexibleSyncConfiguration或PartitionSyncConfiguration打开 Realm,则抛出该异常。 |
UseLegacyGuidRepresentation
获取或设置一个值,该值指示在数据库中存储 Guid 值时是否使用旧版表示形式。
声明
[Obsolete("It is strongly advised to migrate to the new Guid representation as soon as possible to avoid data inconsistency.")]
public static bool UseLegacyGuidRepresentation { get; set; }
属性值
类型 | 说明 |
---|---|
bool |
备注
在 10.10.0 之前的版本中,.NET SDK 存在一个错误,即它会使用特定于架构的字节顺序(大多数现代 CPU 的小端字节序)存储 Guid 值,而数据库查询引擎和 Sync 始终将其视为大字节序。字节序。 这表现为 SDK 和数据库之间的不同字符串表示形式,例如 “f2952191-a847-41c3-8362-497f92cb7d24”而不是“912195f2-47a8-c341-8362-497f92cb7d24”(注意前 3 个组件中交换的字节)。 从 10.10.0 开始,默认采用大端表示形式,并为本地(非同步)Realm 提供无缝的一次性迁移。 首次打开 Realm 时,所有持有 Guid 值的属性都将从小端格式更新为大端格式,.NET SDK 也会如此对待它们。 从 SDK 读取/写入数据时,不应有明显变化,但从 Realm Studio 或其他 SDK 访问 Realm 文件时,应看到一致的值。
对于同步 Realm,由于数据的分布式特性,这样的迁移是不可能的。 因此,假设 Atlas 中的 Guid 表示具有权威性,则应更新 SDK 值以匹配它。这意味着,与 10.10.0 之前的版本相比,SDK 将开始报告现有 GUID 数据的不同字符串表示形式。 如果您通过 SDK 查询第三方系统,则可能会看到意外结果。 要保留现有行为(SDK 中为小端字节序,Atlas 中为大端字节序),请将此值设置为true
并联系 Realm 支持团队 ( https://support.mongodb.com ) 获取将数据迁移到新格式的帮助。
方法
| 编辑本页 查看源代码Add<T>(IEnumerable<T>)
将独立的AsymmetricObjects集合添加到该Realm中。
声明
public void Add<T>(IEnumerable<T> objs) where T : IAsymmetricObject
参数
类型 | 名称 | 说明 |
---|---|---|
IEnumerable <T> | objs | 将添加到此 Realm 的 IAsymmetricObject 实例的collection。 |
类型参数
名称 | 说明 |
---|---|
t | 类型 T 不仅必须是IAsymmetricObject ,而且还经过 Fody 编织器处理,因此具有持久属性。 |
备注
如果collection包含已受此Realm托管的项目,则这些项目将被忽略。此方法会就地修改对象,这意味着在该方法运行后,将在collection中托管所有项目。一旦IAsymmetricObject成为托管对象并提交事务,取消对原始IAsymmetricObject引用的任何属性的引用都会引发异常。 因此,在事务完成后,collection中元素的任何属性都不能再被取消引用。
异常
类型 | 条件 |
---|---|
RealmInvalidTransactionException | |
RealmObjectManagedByAnotherRealmException | 您不能使用多个Realm托管一个对象。 |
Add<T>(IEnumerable<T>, bool)
将独立运行的实例RealmObjectscollection添加到此Realm 。
声明
public void Add<T>(IEnumerable<T> objs, bool update = false) where T : IRealmObject
参数
类型 | 名称 | 说明 |
---|---|---|
IEnumerable <T> | objs | 将添加到此 Realm 的 IRealmObject 实例的collection。 |
bool | update | 如果 |
类型参数
名称 | 说明 |
---|---|
t | 类型 T 不仅必须是IRealmObject ,而且必须经过 Fody 编织器处理,因此具有持久属性。 |
备注
如果collection包含已受此Realm托管的项目,则这些项目将被忽略。此方法会就地修改对象,这意味着在该方法运行后, objs
中的所有项目都将受到托管。
异常
类型 | 条件 |
---|---|
RealmInvalidTransactionException | |
RealmObjectManagedByAnotherRealmException | 您不能使用多个Realm托管一个对象。 |
添加<T>(T)
此Realm将开始管理作为独立运行的实例创建的IAsymmetricObject 。
声明
public void Add<T>(T obj) where T : IAsymmetricObject
参数
类型 | 名称 | 说明 |
---|---|---|
t | obj | 必须是独立运行的实例IAsymmetricObject ,不允许使用 |
类型参数
名称 | 说明 |
---|---|
t | 类型 T 不仅必须是IAsymmetricObject ,而且还经过 Fody 编织器处理,因此具有持久属性。 |
备注
如果该对象已由此Realm托管,则此方法不执行任何操作。 此方法会就地修改对象,这意味着在该方法运行后,将托管IAsymmetricObject 。 一旦IAsymmetricObject成为托管对象,取消引用原始IAsymmetricObject引用的任何属性都会引发异常。
异常
类型 | 条件 |
---|---|
RealmInvalidTransactionException | |
RealmObjectManagedByAnotherRealmException | 您不能使用多个Realm托管一个对象。 |
Add<T>(T, bool)
此Realm将开始管理作为独立运行的实例创建的IRealmObject 。
声明
public T Add<T>(T obj, bool update = false) where T : IRealmObject
参数
类型 | 名称 | 说明 |
---|---|---|
t | obj | 必须是独立对象,不允许使用 |
bool | update | 如果 |
返回:
类型 | 说明 |
---|---|
t | 传递的对象,以便您可以编写 |
类型参数
名称 | 说明 |
---|---|
t | 类型 T 不仅必须是IRealmObject ,而且必须经过 Fody 编织器处理,因此具有持久属性。 |
备注
如果该对象已由此Realm托管,则此方法不执行任何操作。 此方法会就地修改对象,这意味着在其运行后, obj
将受到托管。 返回它只是平均值启用流式语法场景。
异常
类型 | 条件 |
---|---|
RealmInvalidTransactionException | |
RealmObjectManagedByAnotherRealmException | 您不能使用多个Realm托管一个对象。 |
All<T>()
提取一组可遍历的对象以供直接使用或进一步查询。
声明
public IQueryable<T> All<T>() where T : IRealmObject
返回:
类型 | 说明 |
---|---|
IQueryable <T> | 一个可查询的collection,无需进一步筛选,即可迭代此Realm中属于 T 类的所有对象。 |
类型参数
名称 | 说明 |
---|---|
t | 类型 T 必须是IRealmObject 。 |
备注
返回的collection会延迟求值,并且collection本身不会在内存中保存任何对象,这意味着即使对于大量项目,此调用的成本也非常低。
BeginWrite()
开始此 Realm 的写事务(write transaction)。
声明
public Transaction BeginWrite()
返回:
类型 | 说明 |
---|---|
事务 | 处于写入模式的事务,这是创建或修改Realm中持久化对象所必需的。 |
示例
using (var trans = realm.BeginWrite())
{
realm.Add(new Dog
{
Name = "Rex"
});
trans.Commit();
}
|
编辑本页
查看源代码
BeginWriteAsync(CancellationToken)
异步开始此 Realm 的写事务(write transaction)。
声明
public Task<Transaction> BeginWriteAsync(CancellationToken cancellationToken = default)
参数
类型 | 名称 | 说明 |
---|---|---|
CancelationToken | cancelledToken | 可选取消令牌,用于停止等待启动写事务(write transaction)。 |
返回:
类型 | 说明 |
---|---|
任务<事务> |
备注
该方法异步获取写锁(write lock),然后在打开 Realm 的原始线程上分派延续。然后可以异步或同步提交事务。
在没有 SynchronizationContext 的线程上调用时(即 通常是背景线程),此方法会调用BeginWrite()并同步执行。
示例
using (var trans = await realm.BeginWriteAsync())
{
realm.Add(new Dog
{
Name = "Rex"
});
await trans.CommitAsync();
// or just
// trans.Commit();
}
|
编辑本页
查看源代码
Compact(RealmConfigurationBase?)
压缩 Realm 文件。 Realm 文件通常包含可用/未使用的空间。 此方法会删除此可用空间,从而减小文件大小。 Realm 文件中的对象保持不变。
声明
public static bool Compact(RealmConfigurationBase? config = null)
参数
类型 | 名称 | 说明 |
---|---|---|
RealmConfigurationBase | config | 可选配置。 |
返回:
类型 | 说明 |
---|---|
bool |
|
备注
Realm 文件不得在其他线程上打开。 文件系统应具有至少可容纳 Realm 文件副本的可用空间。 不得在事务内部调用此方法。 如果任何文件操作失败,Realm 文件将保持不变。
DeleteRealm(RealmConfigurationBase)
如果 Realm 存在且未打开,则删除与给定 Realm 关联的所有文件。
声明
public static void DeleteRealm(RealmConfigurationBase configuration)
参数
类型 | 名称 | 说明 |
---|---|---|
RealmConfigurationBase | 配置 | 提供 域 路径的RealmConfigurationBase 。 |
备注
Realm 文件不得在其他线程上打开。
除 .锁 之外的所有其他 文件将被删除。
异常
类型 | 条件 |
---|---|
RealmInUseException | 如果 Realm 仍处于打开状态,则抛出该异常。 |
Dispose()
处置当前实例并关闭原生 Realm(如果这是持有其引用的最后一个剩余实例)。
声明
public void Dispose()
Find<T>(ObjectId?)
从具有 PrimaryKey 属性的类中快速查找对象。
声明
public T? Find<T>(ObjectId? primaryKey) where T : IRealmObject
参数
类型 | 名称 | 说明 |
---|---|---|
ObjectId ? | 主键 | 主键完全匹配,与 == 搜索相同。 |
返回:
类型 | 说明 |
---|---|
t |
|
类型参数
名称 | 说明 |
---|---|
t | 类型 T 必须是IRealmObject 。 |
异常
类型 | 条件 |
---|---|
RealmClassLacksPrimaryKeyException | 如果IRealmObject类 T 缺少PrimaryKeyAttribute 。 |
Find<T>(Guid?)
从具有 PrimaryKey 属性的类中快速查找对象。
声明
public T? Find<T>(Guid? primaryKey) where T : IRealmObject
参数
类型 | 名称 | 说明 |
---|---|---|
指南? | 主键 | 主键完全匹配,与 == 搜索相同。 |
返回:
类型 | 说明 |
---|---|
t |
|
类型参数
名称 | 说明 |
---|---|
t | 类型 T 必须是IRealmObject 。 |
异常
类型 | 条件 |
---|---|
RealmClassLacksPrimaryKeyException | 如果IRealmObject类 T 缺少PrimaryKeyAttribute 。 |
查找<T>(long?)
从具有 PrimaryKey 属性的类中快速查找对象。
声明
public T? Find<T>(long? primaryKey) where T : IRealmObject
参数
类型 | 名称 | 说明 |
---|---|---|
long ? | 主键 | 主键完全匹配,与 == 搜索相同。 类型为 |
返回:
类型 | 说明 |
---|---|
t |
|
类型参数
名称 | 说明 |
---|---|
t | 类型 T 必须是IRealmObject 。 |
异常
类型 | 条件 |
---|---|
RealmClassLacksPrimaryKeyException | 如果IRealmObject类 T 缺少PrimaryKeyAttribute 。 |
Find<T>(string?)
从具有 PrimaryKey 属性的类中快速查找对象。
声明
public T? Find<T>(string? primaryKey) where T : IRealmObject
参数
类型 | 名称 | 说明 |
---|---|---|
字符串 | 主键 | 主键完全匹配,与 == 搜索相同。 |
返回:
类型 | 说明 |
---|---|
t |
|
类型参数
名称 | 说明 |
---|---|
t | 类型 T 必须是IRealmObject 。 |
异常
类型 | 条件 |
---|---|
RealmClassLacksPrimaryKeyException | 如果IRealmObject类 T 缺少PrimaryKeyAttribute 。 |
Freeze()
返回此 Realm 的冻结(不可变)快照。
冻结 Realm 是特定版本 Realm 数据的不可变快照视图。 与普通Realm实例不同,它不会实时更新以反映对 Realm 进行的写入,并且可以从任何线程进行访问。写入冻结的 Realm 是不被允许的,尝试开始写事务(write transaction)会引发异常。 从冻结 Realm 读取的所有对象和collection也将被冻结。 注意:保持大量不同版本的冻结 Realm 处于活动状态可能会对底层数据库的文件大小产生负面影响。 为了避免这种情况,可以设置MaxNumberOfActiveVersions 。声明
public Realm Freeze()
返回:
类型 | 说明 |
---|---|
Realm | 冻结的 Realm 实例 |
GetInstance(RealmConfigurationBase?)
用于获取该线程的Realm 实例的工厂。
声明
public static Realm GetInstance(RealmConfigurationBase? config = null)
参数
类型 | 名称 | 说明 |
---|---|---|
RealmConfigurationBase | config | 可选配置。 |
返回:
类型 | 说明 |
---|---|
Realm | 一个Realm 实例。 |
异常
类型 | 条件 |
---|---|
RealmFileAccessErrorException | 如果文件系统返回阻止文件创建的错误,则抛出该错误。 |
GetInstance(string)
用于获取该线程的Realm 实例的工厂。
声明
public static Realm GetInstance(string databasePath)
参数
类型 | 名称 | 说明 |
---|---|---|
字符串 | databasePath | Realm 的路径必须是当前平台的有效完整路径、相对子目录或只是文件名。 |
返回:
类型 | 说明 |
---|---|
Realm | 一个Realm 实例。 |
备注
如果指定相对路径,则当您指定子目录以外的任何路径时,操作系统的沙盒操作可能会导致失败。
异常
类型 | 条件 |
---|---|
RealmFileAccessErrorException | 如果文件系统返回阻止文件创建的错误,则抛出该错误。 |
GetInstanceAsync(RealmConfigurationBase?, CancellationToken)
用于异步获取Realm 实例的工厂。
声明
public static Task<Realm> GetInstanceAsync(RealmConfigurationBase? config = null, CancellationToken cancellationToken = default)
参数
类型 | 名称 | 说明 |
---|---|---|
RealmConfigurationBase | config | 描述 Realm 的配置对象。 |
CancelationToken | cancelledToken | 可选取消令牌,可用于取消工作。 |
返回:
类型 | 说明 |
---|---|
任务< Realm > | 一个可等待的任务<TResult> ,一旦远程域完全同步,或者如果是本地域,则在执行迁移后完成。 |
备注
如果配置为SyncConfigurationBase ,则在返回的 任务 对象完成之前,将下载 域 并与服务器完全同步。否则,此方法将在背景线程上执行所有迁移,然后再将打开的实例返回给调用线程。
IsSameInstance(Realm)
确定此实例是否与传入参数为同一核心实例。
声明
public bool IsSameInstance(Realm other)
参数
类型 | 名称 | 说明 |
---|---|---|
Realm | 其他 | 要与当前 Realm 进行比较的 Realm。 |
返回:
类型 | 说明 |
---|---|
bool |
|
备注
您可以而且应该在不同的线程上打开多个实例,这些实例具有相同的路径并打开相同的 Realm。
Refresh()
更新Realm 实例和未完成的对象,使其指向最新的持久化版本。
声明
public bool Refresh()
返回:
类型 | 说明 |
---|---|
bool | Realm是否有任何更新。 请注意,即使数据实际上没有发生变化,这也可能返回 true。 |
RefreshAsync()
异步等待Realm实例和未完成的对象进行更新以指向最新的持久化版本。
声明
public Task<bool> RefreshAsync()
返回:
类型 | 说明 |
---|---|
任务< bool > | Realm是否有任何更新。 请注意,即使数据实际上没有发生变化,这也可能返回 true。 |
备注
在工作线程(其中 SynchronizationContext)为 null 的情况下,这将改为调用阻塞的Refresh()方法。 在主线程(或具有 SynchronizationContext 的其他线程)上,它将等到实例自动更新后再解决任务。 请注意,您必须保留对 Realm 的引用,直到返回的任务得到解决。
删除 (IRealmObjectBase)
从此 Realm 中移除持久对象,从而有效地将其删除。
声明
public void Remove(IRealmObjectBase obj)
参数
类型 | 名称 | 说明 |
---|---|---|
IRealmObjectBase | obj | 必须是此 Realm 中持久保存的对象。 |
异常
类型 | 条件 |
---|---|
RealmInvalidTransactionException | |
ArgumentNullException | 如果 |
ArgumentException | 如果传递非托管对象。 |
RemoveAll()
删除此 Realm 托管的所有类型的所有对象。
声明
public void RemoveAll()
异常
类型 | 条件 |
---|---|
RealmInvalidTransactionException |
RemoveAll<T>()
从 Realm 中删除某一类型的所有对象。
声明
public void RemoveAll<T>() where T : IRealmObject
类型参数
名称 | 说明 |
---|---|
t | 要删除的对象的类型。 |
异常
类型 | 条件 |
---|---|
RealmInvalidTransactionException | |
ArgumentException | 如果类型 T 不属于此 Realm 的模式中的有限类集。 |
RemoveRange<T>(IQueryable<T>)
从 Realm 中删除与查询匹配的对象。
声明
public void RemoveRange<T>(IQueryable<T> range) where T : IRealmObjectBase
参数
类型 | 名称 | 说明 |
---|---|---|
IQueryable <T> | 范围 | 要匹配的查询。 |
类型参数
名称 | 说明 |
---|---|
t | 要删除的对象的类型。 |
异常
类型 | 条件 |
---|---|
RealmInvalidTransactionException | |
ArgumentException | 如果 |
ArgumentNullException | 如果 |
ResolveReference<TValue>(Dictionary<TValue>)
返回与首次创建ThreadSafeReference.Dictionary<TValue>时引用的collection相同的collection,但已解析为此线程的当前 Realm。
声明
public IDictionary<string, TValue>? ResolveReference<TValue>(ThreadSafeReference.Dictionary<TValue> reference)
参数
类型 | 名称 | 说明 |
---|---|---|
ThreadSafeReference 。字典<TValue> | 引用 | 对要在此 Realm 中解析的具有线程限制的 IDictionary<TKey, TValue> 的线程安全引用。 |
返回:
类型 | 说明 |
---|---|
IDictionary < string , TValue> | 为当前线程解析的原始IDictionary<TKey, TValue>的具有线程限制的实例,如果在创建引用后已删除实例的父对象,则为 |
类型参数
名称 | 说明 |
---|---|
TValue | 字典中包含的值的类型。 |
ResolveReference<T>(List<T>)
返回与首次创建ThreadSafeReference.List<T>时引用的collection相同的collection,但已解析为此线程的当前 Realm。
声明
public IList<T>? ResolveReference<T>(ThreadSafeReference.List<T> reference)
参数
类型 | 名称 | 说明 |
---|---|---|
ThreadSafeReference 。列表<T> | 引用 |
返回:
类型 | 说明 |
---|---|
IList <T> | 为当前线程解析的原始IList<T>的具有线程限制的实例,如果在创建引用后列表的父对象已被删除,则为 |
类型参数
名称 | 说明 |
---|---|
t | 集合中包含的对象的类型。 |
ResolveReference<T>(Object<T>)
返回与首次创建ThreadSafeReference.Object<T>时引用的对象相同的对象,但已解析为该线程的当前 Realm。
声明
public T? ResolveReference<T>(ThreadSafeReference.Object<T> reference) where T : IRealmObjectBase
参数
类型 | 名称 | 说明 |
---|---|---|
ThreadSafeReference 。对象<T> | 引用 | 对要在此 Realm 中解析的具有线程限制的 IRealmObject / IEmbeddedObject 的线程安全引用。 |
返回:
类型 | 说明 |
---|---|
t | 为当前线程解析的原始IRealmObject / IEmbeddedObject的具有线程限制的实例,如果在创建引用后该实例已被删除,则为 |
类型参数
名称 | 说明 |
---|---|
t | 引用中包含的对象的类型。 |
ResolveReference<T>(查询<T>)
返回与首次创建ThreadSafeReference.Query<T>时引用的查询相同的查询,但已解析为此线程的当前 Realm。
声明
public IQueryable<T> ResolveReference<T>(ThreadSafeReference.Query<T> reference) where T : IRealmObjectBase
参数
类型 | 名称 | 说明 |
---|---|---|
ThreadSafeReference 。查询<T> | 引用 |
返回:
类型 | 说明 |
---|---|
IQueryable <T> | 为当前线程解析的原始IQueryable<T>的具有线程限制的实例。 |
类型参数
名称 | 说明 |
---|---|
t | 查询中包含的对象的类型。 |
ResolveReference<T>(Set<T>)
返回与首次创建ThreadSafeReference.Set<T>时引用的collection相同的collection,但已解析为此线程的当前 Realm。
声明
public ISet<T>? ResolveReference<T>(ThreadSafeReference.Set<T> reference)
参数
类型 | 名称 | 说明 |
---|---|---|
ThreadSafeReference 。设置<T> | 引用 |
返回:
类型 | 说明 |
---|---|
ISet <T> | 为当前线程或 |
类型参数
名称 | 说明 |
---|---|
t | collection中包含的元素的类型。 |
SetLegacySerialization()
将序列化器设置为使用传统序列化。
声明
[Obsolete("It is recommended to use new serialization.")]
public static void SetLegacySerialization()
备注
在版本12.0.0中,引入了在使用MongoClient.Collection<TDocument>上的方法时对Realm类进行自动序列化和反序列化的新功能,而无需使用MongoDB.Bson属性来注释类。 此新序列化更改了各种类型(实例DateTimeOffset )的默认序列化器,因此如果您更愿意使用旧序列化,则需要调用此方法。 请记住在需要任何类型的序列化之前调用此方法,否则无法保证按预期工作。
Write(Action)
在临时Transaction中执行操作。 如果没有抛出异常,则将提交事务。
声明
public void Write(Action action)
参数
类型 | 名称 | 说明 |
---|---|---|
操作 | 操作 | 在事务中执行的操作,用于创建、更新或删除对象。 |
备注
创建自己的临时事务,并在运行传递给action
的 lambda 后提交。 在多个Write(Action)调用中包装多个单个属性更新时要小心。 在单个Write(操作)中更新多个属性甚至创建多个对象效率更高,除非需要保证更细粒度的更新。
示例
realm.Write(() =>
{
realm.Add(new Dog
{
Name = "Eddie",
Age = 5
});
});
|
编辑本页
查看源代码
WriteAsync(操作, CancellationToken)
在临时Transaction中执行操作。 如果没有抛出异常,则将提交事务。 如果不是从带有SynchronizationContext的线程(例如 用户界面 线程)调用该方法,则该方法将以同步方式运行。
声明
public Task WriteAsync(Action action, CancellationToken cancellationToken = default)
参数
类型 | 名称 | 说明 |
---|---|---|
操作 | 操作 | 在事务中执行的操作,用于创建、更新或删除对象。 |
CancelationToken | cancelledToken | 可选取消令牌,用于停止等待启动写事务(write transaction)。 |
返回:
类型 | 说明 |
---|---|
任务 | 指示事务已成功提交的可等待任务。 |
示例
await realm.WriteAsync(() =>
{
realm.Add(new Dog
{
Breed = "Dalmatian",
});
});
|
编辑本页
查看源代码
WriteAsync<T>(Func<T>, CancellationToken)
在临时事务中执行委托。如果没有抛出异常,则将提交事务。 如果不是从带有SynchronizationContext的线程(例如 用户界面 线程)调用该方法,则该方法将以同步方式运行。
声明
public Task<T> WriteAsync<T>(Func<T> function, CancellationToken cancellationToken = default)
参数
类型 | 名称 | 说明 |
---|---|---|
Func <T> | function | 在事务中执行的具有一个返回值的委托,用于创建、更新或删除对象。 |
CancelationToken | cancelledToken | 可选取消令牌,用于停止等待启动写事务(write transaction)。 |
返回:
类型 | 说明 |
---|---|
任务<T> | 指示事务已成功提交的可等待任务。 任务的结果是调用 |
类型参数
名称 | 说明 |
---|---|
t | 输入委托返回的类型。 |
示例
var dog = await realm.WriteAsync(() =>
{
return realm.Add(new Dog
{
Breed = "Dalmatian",
});
});
|
编辑本页
查看源代码
WriteCopy(RealmConfigurationBase)
将 Realm 的压缩副本写入指定配置中的路径。 如果配置对象具有非空EncryptionKey ,则将使用该密钥对副本进行加密。
声明
public void WriteCopy(RealmConfigurationBase config)
参数
类型 | 名称 | 说明 |
---|---|---|
RealmConfigurationBase | config | 配置,指定副本的路径和可选加密密钥。 |
备注
- 目标文件不能是已经存在的文件。
- 当使用本地 Realm 时,如果从事务中调用此方法,则会写入当前数据,而不是提交最后一个事务时的数据。
- 使用同步时,要求在写入副本之前将所有本地更改与服务器同步。 这是为了确保该文件可以用作新安装的应用程序的起点。如果有待上传的内容,该函数将抛出异常。
- 除非已经启用了Flexible Sync,否则不支持将副本写入到Flexible Sync 域。5 不支持从 FlexibleSync 同步更改为基于分区的同步。
- 不支持更改要同步的分区。
Write<T>(Func<T>)
声明
public T Write<T>(Func<T> function)
参数
类型 | 名称 | 说明 |
---|---|---|
Func <T> | function | 在事务中执行的具有一个返回值的委托,用于创建、更新或删除对象。 |
返回:
类型 | 说明 |
---|---|
t |
|
类型参数
名称 | 说明 |
---|---|
t | 输入委托返回的类型。 |
备注
创建自己的临时事务,并在运行传递给function
的 lambda 后提交。 在多个Write(Action)调用中包装多个单个属性更新时要小心。 在单个Write(操作)中更新多个属性甚至创建多个对象效率更高,除非需要保证更细粒度的更新。
示例
var dog = realm.Write(() =>
{
return realm.Add(new Dog
{
Name = "Eddie",
Age = 5
});
});
事件(Events)
| 编辑本页 查看源代码错误
发生 Realm 级异常时触发。
声明
public event EventHandler<ErrorEventArgs>? Error
eventType
类型 | 说明 |
---|---|
EventHandler < ErrorEventArgs > |
RealmChanged
当 Realm 发生更改(即提交事务)时触发。
声明
public event Realm.RealmChangedEventHandler? RealmChanged
eventType
类型 | 说明 |
---|---|
Realm 。 RealmChangedEventHandler |