12.5.0 (2025-01-02)
Mudanças de última hora
- O suporte para UWP no braço32 foi removido devido ao fato de o SDK do Windows não ser mais compatível com o ARM de 32bits. (PR #3683)
- O suporte para projetos Xamarin foi descontinuado. Embora ainda esperemos que o SDK funcione, não testamos mais ativamente no Xamarin, pois ele foi desativado pela Microsoft desde maio. (PR #3683)
- O suporte para .NET 6 está obsoleto. Ainda estamos esperando que tudo funcione, mas redirecionaremos o SDK para a versão mais recente do LTS (8.0) em uma versão futura. (PR #3683)
Corrigido
- Correção de falha durante o desligamento do aplicativo cliente quando o nível de registro do Logger é definido como superior a Info. (Núcleo 14.12.1)
- Se Arquivo::rw_lock() não conseguir abrir um arquivo, a mensagem de exceção não conterá o nome do arquivo. (Núcleo 14.12.1)
- O fallback para o nome do arquivo hashed falhará se o comprimento do nome de base estiver entre 240 e 250. (Núcleo 14.12.1)
- Ter uma query com vários predicados ORed juntos pode resultar em uma falha em algumas plataformas (a verificação estrita de ordenação fraca falha no iPhone). (Núcleo 14.13.0)
Compatibilidade
- Realm Studio: 15.0.0 ou posterior.
Interno
- Usando o Núcleo 14.13.0.
12.4.1 (2024-09-16)
Corrigido
- Corrigiu uma possível interrupção do tráfego de sincronização sob carga pesada ao usar soquetes da Web gerenciados em que mensagens binárias malformadas fazem com que o servidor interrompa a conexão e force o cliente a se reconectar e fazer upload novamente. (Emissão #3671).
Compatibilidade
- Realm Studio: 15.0.0 ou posterior.
Interno
- Usando o Núcleo 14.12.0.
12.4.0 (2024-08-25)
Melhorias
- Introduza uma propriedade
ReconnectBackoffOptions
emSyncTimeoutOptions
que permite o controle sobre o atraso que o cliente de sincronização aplica antes de tentar se reconectar. (PR #3661). - As alterações de funções e permissões não exigem mais um reinício do cliente para atualizar o Realm local . (Núcleo 14.11.0)
- Em dispositivos Windows, o Device Sync também procurará certificados SSL no armazenamento de certificados Autoridades de Certificação Raiz Confiáveis do Windows ao estabelecer uma conexão. (Núcleo 14.11.0)
- As declarações de registro de sincronização agora incluem a ID de conexão dos serviços de aplicativos em seu prefixo (por exemplo,
Connection[1:<connection id>] Session[1]: log message
) para facilitar a correlação da atividade de sincronização com os registros do servidor durante a solução de problemas. (Núcleo 14.11.2) - Melhore o desempenho do bootstrap de sincronização reduzindo o número de seleções de tabela nos registros de replicação para objetos incorporados. (Núcleo 14.12.0)
- Lançamento de um bloqueio de leitura que era fixado durante a duração de uma assinatura mutável mesmo após o commit. Isso libera recursos mais cedo e pode melhorar o desempenho dos bootstraps de sincronização em que o estado inicial é grande. (Núcleo 14.12.0)
- A detecção do ciclo de redefinição do cliente agora verifica se a tentativa de recuperação anterior foi feita pela mesma versão principal e, se não for possível, tenta a recuperação novamente. (Núcleo 14.12.0)
- Versão OpenSSL agrupada atualizada para 3.3.1. (Núcleo 14.12.0)
Corrigido
- O progresso do download de sincronização só era atualizado quando as inicializações eram concluídas, fazendo com que fosse sempre 0 antes da primeira conclusão e depois para sempre 1. (Núcleo 14.11.0)
- O cliente de sincronização pode falhar se uma sessão for retomada enquanto a sessão estiver sendo suspensa. (Núcleo 14.11.0)
- Se uma sessão de sincronização for interrompida por uma desconexão ou reiniciada durante o download de um bootstrap, os dados obsoletos do bootstrap anterior poderão ser incluídos quando a sessão reconectar e baixar o bootstrap. Isso pode levar a objetos armazenados no banco de banco de dados que não correspondem ao estado real do servidor e potencialmente levar a gravações compensações. (Núcleo 14.11.0)
- Corrigidas viagens de ida e volta desnecessárias do servidor quando não há download para confirmar. (Núcleo 14.11.0)
- A chamada de resposta de resposta de assinatura do aplicativo estava sendo acionada antes que o perfil do usuário fosse recuperado no login, levando a um perfil de usuário vazio ao usar a chamada de resposta de resposta. (Núcleo 14.11.1)
- O cliente de sincronização pode relatar erros de gravação compensatórios duplicados. (Núcleo 14.11.2)
- Correção de uma exceção de "chave de coluna inválida" ao usar uma RQL "BEween" em uma propriedade int ou timestamp entre links. (Núcleo 14.12.0)
- Corrigiu o bug de resolução de conflitos relacionado às instruções ArrayErase e Clean, que às vezes poderia causar uma exceção de "Invalid prior_size" para impedir a sincronização. (Núcleo 14.12.0)
- Corrigido o bug que impedia a consistência eventual durante a resolução de conflitos. Como resultado, os clientes afetados sofreriam divergência de dados e potencialmente erros de consistência. (Núcleo 14.12.0)
- Foram corrigidos problemas ao carregar as bibliotecas de Realm nativas em sistemas Linux ARMv7 quando elas eram vinculadas ao nosso OpenSSL agrupado, resultando em erros como
unexpected reloc type 0x03
. (Núcleo 14.12.0) Realm.Copy()
às vezes, lançava incorretamente uma exceção, afirmando que havia alterações locais não carregadas quando o realm de origem é um Realm Realm. (Núcleo 14.12.0)
Compatibilidade
- Realm Studio: 15.0.0 ou posterior.
Interno
- Usando o Núcleo 14.12.0.
12.3.0 (2024-07-17)
Itens obsoletos
- O
Logger
foi preterido a favor deRealmLogger
, do qualLogger
atualmente deriva. (PR #3634)- Os acessadores
Logger.LogLevel
set
eget
foram descontinuados. UseRealmLogger.SetLogLevel()
eRealmLogger.GetLogLevel()
(consulte Aprimoramentos abaixo). - O
Logger.Function(Action<LogLevel, string> logFunction)
foi descontinuado. UseRealmLogger.Function(Action<LogLevel, LogCategory, string> logFunction)
(veja Melhorias abaixo).
- Os acessadores
Melhorias
- Permita que
ShouldCompactOnLaunch
seja definido emSyncConfiguration
, não apenasRealmConfiguration
. (Emissão #3617) - Reduz o tamanho do registro de transações local produzido pela criação de objetos, melhorando o desempenho de transações com muita inserção (Core 14.10.0).
- O desempenho foi melhorado para queries de intervalo em números inteiros e carimbos de data/hora. Requer que você use a operação "Between" em
Realm.All<T>().Filter(...)
. (Núcleo 14.10.1) - Permitiu que
ShouldCompactOnLaunch
fosse definido emSyncConfiguration
e não apenasRealmConfiguration
. (Emissão #3617) - Introduziu um
LogCategory
e permite mais controle sobre qual categoria de mensagens deve ser registrada e em qual nível de criticidade. (PR #3634)- Configuração permitida e obtenção de um
LogLevel
para um determinadoLogCategory
. A hierarquia de categorias começa emLogCategory.Realm
.RealmLogger.SetLogLevel(LogLevel.Warn, LogCategory.Realm.Sync); RealmLogger.GetLogLevel(LogCategory.Realm.Sync.Client.Session); // LogLevel.Warn
- Foi adicionado um registrador de função que aceita um chamada de resposta de chamada que receberá
LogLevel
,LogCategory
e a mensagem quando invocado.RealmLogger.Default = RealmLogger.Function((level, category, message) => /* custom implementation */);
- Foi adicionada uma sobrecarga de
RealmLogger.Log()
a uma categoria. A APILog()
preexistente registrará implicitamente emLogCategory.Realm.SDK
.RealmLogger.Default.Log(LogLevel.Warn, LogCategory.Realm, "A warning message");
- Configuração permitida e obtenção de um
- Em dispositivos Windows, o Device Sync também procurará certificados SSL no armazenamento de certificados Autoridades de Certificação Raiz Confiáveis do Windows ao estabelecer uma conexão. (Núcleo 14.11.0)
- As alterações de funções e permissões não exigem mais um reinício do cliente para atualizar o Realm local . (Núcleo 14.11.0)
Corrigido
- Um notificador de progresso
ForCurrentlyOutstandingWork
não chamaria imediatamente sua chamada de resposta após o registro. Em vez disso, você teria que esperar que alguns dados fossem recebidos para obter sua primeira atualização - se já tivesse sido recuperado quando registrou o notificador, poderia acabar esperando muito tempo para que o servidor entregasse um download que ligaria/expiraria seu notificador. (Núcleo 14.8.0) - Após a compactação, uma atualização do arquivo seria acionada. Isso pode causar perda de dados se
ShouldDeleteIfMigrationNeeded
estiver definido comotrue
. (Emissão #3583, Core 14.9.0) - Passar um objeto excluído como um argumento de substituição para
.Filter()
geraria um erro confuso com uma mensagem que começa cominvalid RQL for table
. Agora, ele apresenta um erro mais descritivo. (Emissão #3619) - Corrija algumas redefinições de cliente (como a migração para a Flexible Sync) que podem falhar com AutoClientResetFailed se uma nova condição de reinício do cliente (como a reversão de uma migração de Flexible Sync) ocorrer antes da primeira ser concluída. (Núcleo 14.10.0)
- Os arquivos criptografados no Windows tinham um tamanho máximo de 2GB, mesmo em x64 , devido ao uso interno de
off_t
, que é um tipo de 32bits no 64bits do Windows. (Núcleo 14.10.0) - O código de criptografia não se comporta mais de forma diferente dependendo do tamanho da página do sistema, o que deve eliminar totalmente uma fonte recorrente de bugs relacionados à cópia de arquivos Realm criptografados entre plataformas com tamanhos de página diferentes. Um bug pendente conhecido era (RNET-1141), em que a abertura de arquivos em um sistema com um tamanho de página maior do que o sistema de escrita tentaria ler seções do arquivo que nunca tinham sido gravadas. (Núcleo 14.10.0)
- Havia vários cenários complicados que poderiam resultar em leituras obsoletas de arquivos criptografados em cenários de multiprocesso. Eles eram muito difíceis de atingir e normalmente causavam uma falha, devido a uma falha de afirmação ou DecryptionFailure sendo lançado. (Núcleo 14.10.0)
- Arquivos criptografados têm algumas corridas de dados benignas onde podemos memcpy um bloco de memória enquanto outro thread está gravando em uma faixa limitada dele. É logicamente impossível ler a partir desse intervalo quando isso acontece, mas o Thread Sanitizer reclama bastante disso. Agora realizamos operações mais lentas ao executar com TSan, o que evita essa corrida benigna. (Núcleo 14.10.0)
- A tokenização de strings para pesquisa de texto completo pode passar valores fora do intervalo [-1, 255] para
isspace()
, que é um comportamento indefinido. (Núcleo 14.10.0) - Abrir um Flexible Sync Realm de forma assíncrona pode não esperar para baixar todos os dados. (Núcleo 14.10.1)
- Limpar uma Lista de
RealmValue
em um arquivo atualizado levaria a uma falha de asserção. (Núcleo 14.10.1) - Você pode obter resultados inesperados de mesclagem ao atribuir a uma coleção aninhada. (Núcleo 14.10.2)
- Corrigiu a remoção de backlinks dos objetos errados se o link viesse de uma lista agrupada, dicionário aninhado, dicionário de nível superior ou lista de
RealmValue
e a tabela de origem tivesse mais de 256 objetos. Isso pode se manifeste comoarray_backlink.cpp:112: Assertion failed: int64_t(value >> 1) == key.value
ao remover um objeto. (Núcleo 14.10.3) - Corrigido o recolhimento/reunião de clusters que continham coleções aninhadas com links. Isso pode se materializar como
array.cpp:319: Array::move() Assertion failed: begin <= end [2, 1]
ao remover um objeto. (Núcleo 14.10.3) Session.WaitForUpload()
era inconsistente na forma como lidava com commits que não produziam nenhum conjunto de alterações para upload. Anteriormente, às vezes, ele era concluído imediatamente se todos os commits que aguardavam para serem carregados estivessem vazios e, outras vezes, aguardava uma viagem de ida e volta do servidor . Agora ele sempre será concluído imediatamente. (Núcleo 14.10.3)- Quando uma propriedade é remapeada, chamar
.Filter("... SORT/DISTINCT(mapped-to-name)")
com o nome interno pode gerar um erro comoCannot sort on key path 'NAME': property 'PersonObject.NAME' does not exist
. (Núcleo 14.10.4) - O cliente de sincronização pode falhar se uma sessão for retomada enquanto a sessão estiver sendo suspensa. (Núcleo 14.11.0)
- Se uma sessão de sincronização for interrompida por uma desconexão ou reiniciada durante o download de um bootstrap, os dados obsoletos do bootstrap anterior poderão ser incluídos quando a sessão reconectar e baixar o bootstrap. Isso pode levar a objetos armazenados no banco de banco de dados que não correspondem ao estado real do servidor e potencialmente levar a gravações compensações. (Núcleo 14.11.0)
- Corrigidas viagens de ida e volta desnecessárias do servidor quando não há download para confirmar. (Núcleo 14.11.0)
Compatibilidade
- Realm Studio: 15.0.0 ou posterior.
Interno
- Usando o Core v14.10.3.
12.2.0 (2024-05-22)
Melhorias
Cálculo aprimorado de
SyncProgress.ProgressEstimate
. (Emissão #3580)Suporte adicionado para
Migration.FindInNewRealm
, que é um auxiliar que permite pesquisar o objeto no Realm pós-migração que corresponde a um objeto do Realm pré-migração. (Emissão #3600)Adicionado
[System.Reflection.Obfuscation]
no campoRealmSchema
gerado para melhorar a compatibilidade com ferramentas de ofuscação que alteram os nomes de campo e propriedade das classes geradas. (Emissão #3574)Suporte adicionado para lista e dicionários de
RealmValue
(IList<RealmValue>
eIDictionary<string, RealmValue>
) a serem contidos em umRealmValue
. Listas e dicionários podem conter um número arbitrário de coleções. É possível converter uma coleção existente em umRealmValue
usando os novos métodos estáticosRealmValue.List
eRealmValue.Dictionary
ou usando os operadores implícitos se converter de tipos comuns comoList
,RealmValue[]
ouDictionary
. Finalmente, é possível obter as collections contidas usando o novo método de conversãoAsList
eAsDictionary
. Por exemplo:var list = new List<RealmValue> { 1, true, "stringVal" }; var rvo = realm.Write(() => { return realm.Add(new RealmValueObject { RealmValueProperty = list}); }); var retrievedList = rvo.RealmValueProperty.AsList();
(PR #3441)
Corrigido
- Acessar
App.CurrentUser
de dentro de uma notificaçãoUser.Changed
travaria. (Núcleo 14.7.0) - Inserir o mesmo link para a mesma chave em um dicionário mais de uma vez criaria incorretamente vários backlinks para o objeto. Isso não parece causar falhas mais tarde, mas teria afetado o valor retornado por
RealmObject.BacklinksCount
e queries envolvendo contagens de backlinks. (Núcleo 14.7.0) - Corrigido um problema que faria com que
RealmObject.DynamicApi.GetList/Set/Dictionary
falhasse quando a coleção contivesse valores primitivos. (Emissão #3597)
Compatibilidade
- Realm Studio: 15.0.0 ou posterior.
Interno
- Usando o Núcleo 14.7.0.
12.1.0 (2024-05-01)
Melhorias
- Foi adicionada uma API experimental para atualizar o URL base de um aplicação em tempo de execução -
App.UpdateBaseUriAsync()
. Destina-se a ser usado para roaming entre o servidor de borda e a nuvem. (Emissão #3521)
Corrigido
- O valor retornado de
MongoClient.Collection.FindOneAsync
agora é um documento anulável para transmitir mais explicitamente quenull
pode ser retornado caso nenhum objeto corresponda ao filtro. (PR #3586) - Corrigiu a falha ao integrar a remoção da chave de dicionário já removida. (Núcleo 14.5.2)
App.AllUsers
incluía usuários desconectados somente se eles estivessem desconectados enquanto a instância do aplicativo existisse. Agora sempre inclui todos os usuários desconectados. (Núcleo 14.6.0)- Foram corrigidos vários problemas relacionados à portabilidade de arquivos criptografados (copiando um Realm criptografado "agrupado" de um dispositivo para outro): (Núcleo 14.6.0)
- Corrigiu
Assertion failed: new_size % (1ULL << m_page_shift) == 0
ao abrir um Realm criptografado menor que 64Mb que foi gerado em uma plataforma com um tamanho de página diferente da plataforma atual. - Corrigiu uma exceção
DecryptionFailed
lançada ao abrir um pequeno (<4k de dados) Realm em um dispositivo com um tamanho de página de 4k se fosse agrupado e aberto em um dispositivo com um tamanho de página maior. - Corrigido um problema durante uma abertura subsequente de um Realm criptografado para alguns padrões de alocação raros quando a referência superior estava dentro de ~50 bytes do final de uma página. Isso pode se manifeste como uma exceção DecryptionFailed ou como uma afirmação:
encrypted_file_mapping.hpp:183: Assertion failed: local_ndx < m_page_state.size()
.
- Corrigiu
- A inicialização do esquema poderia atingir uma falha de asserção se o cliente de sincronização aplicasse um conjunto de alterações baixado enquanto o Arquivo de Realm estivesse em processo de abertura. (Núcleo 14.6.0)
- Melhora o desempenho de queries "encadeadas OU de igualdade" para tipos UUID/ObjectId e de queries "IN" analisadas RQL em tipos de string/int/uuid/ObjectId . (Núcleo 14.6.0)
- Corrigido um bug ao executar uma query IN (ou uma query do padrão
x == 1 OR x == 2 OR x == 3
) ao avaliar em uma propriedade de string com uma string vazia na condição Atlas Search. As correspondências com uma string vazia teriam sido avaliadas como se procurassem uma string nula. (Núcleo 14.6.1)
Compatibilidade
- Realm Studio: 15.0.0 ou posterior.
Interno
- Usando o Núcleo 14.6.1.
12.0.0 (2024-04-17)
Versão de formato de arquivo alterada. Os arquivos antigos serão atualizados automaticamente, mas não podem ser downgrade e abertos com versões mais antigas do .NET SDK.
Mudanças de última hora
- Adicionada serialização e desserialização automáticas de classes do Realm ao usar métodos no
MongoClient.Collection
, sem a necessidade de anotar classes com atributosMongoDB.Bson
. Esse recurso exigia a alteração da serialização padrão para vários tipos (incluindoDateTimeOffset
). Se você preferir usar a serialização anterior, será necessário chamarRealm.SetLegacySerialization
antes de fazer qualquer tipo de serialização , caso contrário, ela pode não funcionar conforme o esperado. #3459 SyncProgress.TransferredBytes
eSyncProgress.TransferableBytes
foram removidos a favor deSyncProgress.ProgressEstimate
, um valor double entre 0.0 e 1.0 que expressa a estimativa percentual do progresso atual. (Emissão #3478)- Suporte para atualização de arquivos Realm produzidos por RealmCore v5.23.9 (Realm .NET v5.0.1) ou anterior não é mais permitido. (Núcleo 14.0.0)
String
ebyte[]
agora são fortemente digitados para comparações e consultas. Esta alteração é especialmente relevante ao executar query de uma constante de string em uma propriedadeRealmValue
, pois agora somente strings serão retornadas. Se a pesquisa de dados binários for desejada, esse tipo deverá ser especificado pela constante. Em RQL (.Filter()
) a nova maneira de especificar uma constante binária é usarRealmValueProp = bin('xyz')
ouRealmValueProp = binary('xyz')
. (Núcleo 14.0.0)- A ordem de classificação das strings foi alterada para usar a ordem de ponto de código unicode padrão em vez de agrupar letras em inglês semelhantes. Uma mudança notável será de "aAbBzZ" para "ABZabz". (Núcleo 14.0.0)
- Em RQL (
Filter()
), se você deseja consultar usando a operação@type
, você deve usarobjectlink
para corresponder links para objetos.object
está reservado para tipos de dicionário. (Núcleo 14.0.0) - A abertura do domínio com formato de arquivo 23 ou inferior (versões do Realm .NET anteriores a 12.0.0) no modo somente leitura falhará. (Núcleo 14.0.0)
Melhorias
Uso de memória reduzido de
RealmValue
. (PR #3441)Adiciona suporte para passar uma coleção de caminhos principais (
KeyPathsCollection
) ao usarIRealmCollection.SubscribeForNotifications
. Passar umKeyPathsCollection
permite especificar quais alterações nas propriedades devem gerar uma notificação.Um
KeyPathsCollection
pode ser obtido por:- construí-lo explicitamente usando os métodos
KeyPathsCollection.Of
ouKeyPathsCollection.Of<T>
; - construí-lo implicitamente com a conversão de um
List
ou array deKeyPath
ou strings; - obtendo um dos valores estáticos
Full
eShallow
para notificações completas e rasas, respectivamente.
Um
KeyPath
pode ser obtido por conversão implícita de uma string ou construído a partir de uma expressão utilizando o métodoKeyPath.ForExpression<T>
.Por exemplo:
var query = realm.All<Person>(); KeyPath kp1 = "Email"; KeyPath kp2 = KeyPath.ForExpression<Person>(p => p.Name); KeyPathsCollection kpc; //Equivalent declarations kpc = KeyPathsCollection.Of("Email", "Name"); kpc = KeyPathsCollection.Of<Person>(p => p.Email, p => p.Name); kpc = new List<KeyPath> {"Email", "Name"}; kpc = new List<KeyPath> {kp1, kp2}; query.SubscribeForNotifications(NotificationCallback, kpc);
(PR #3501 )
- construí-lo explicitamente usando os métodos
Foi adicionado o método
MongoClient.GetCollection<T>
para obter uma coleção de documentos do MongoDB que podem ser desserializados em objetos do Realm. Esses métodos funcionam da mesma forma queMongoClient.GetDatabase(dbName).GetCollection(collectionName)
, mas o nome do banco de dados e o nome da coleção são derivados automaticamente da classe de objeto de Realm. #3414Desempenho aprimorado de RQL (
.Filter()
) em uma propriedade de string de caracteres não vinculada usando: >, > =, <, <=, operadores e comportamento fixo de que uma string nula deve ser avaliada como menor que tudo, anteriormente os nulos não eram correspondidos . (Núcleo 13.27.0)Versão OpenSSL agrupada atualizada para 3.2.0. (Núcleo 13.27.0)
O armazenamento de propriedades decimais128 foi otimizado para que os valores individuais ocupem 0 bits (se todos os nulos), 32 bits, 64 bits ou 128 bits, dependendo do que for necessário. (Núcleo 14.0.0)
Adiciona suporte para índices de collection em RQL (
Filter()
). Por exemplo:var people = realm.All<Person>(); //People whose first dog is called "Fluffy" var query1 = people.Filter("ListOfDogs[FIRST].Name = $0", "Fluffy") //People whose last dog is called "Fluffy" var query2 = people.Filter("ListOfDogs[LAST].Name = $0", "Fluffy") //People whose second dog is called "Fluffy" var query3 = people.Filter("ListOfDogs[2].Name = $0", "Fluffy") //People that have a dog called "Fluffy" var query4 = people.Filter("ListOfDogs[*].Name = $0", "Fluffy") //People that have 3 dogs var query5 = people.Filter("ListOfDogs[SIZE] = $0", 3)
(Núcleo 14.0.0)
Adicionado suporte para propriedades indexadas do
RealmValue
. (PR #3544)Melhore o desempenho de notificadores de objetos com esquemas complexos e alterações muito simples para processar em até 20%. (Núcleo 14.2.0)
Melhore o desempenho com um número muito grande de notificadores de até 75%. (Núcleo 14.2.0)
Melhore o desempenho da compactação de arquivos em plataformas com tamanhos de página maiores que 4k (por exemplo , plataformas Arm64 da Apple) para arquivos com menos de 256 páginas. (Núcleo 14.4.0)
O URL base padrão em
AppConfiguration
foi atualizado para apontar paraservices.cloud.mongodb.com
. Consulte https://www.mongodb.com/pt-br/docs/atlas/app-services/domain-migration/ para mais informações. (Emissão #3551)
Corrigido
- Foram corrigidas queries RQL (
.Filter()
) comoindexed_property == NONE {x}
que correspondiam erroneamente a apenas x em vez de não x. Isso só se aplica quando uma propriedade indexada com igualdade (==, ou IN) corresponde aNONE
em uma lista de um item. Se a lista constante contivesse mais de um valor, ela estava funcionando corretamente. (Núcleo 13.27.0) - O upload dos conjuntos de alterações recuperados durante uma recuperação automática de redefinição do cliente pode levar a erros de "Versão incorreta do servidor" e a uma redefinição do novo cliente. (Núcleo 13.27.0)
- Corrigiu a falha no índice de texto completo usando pesquisa de prefixo sem correspondência. (Núcleo 13.27.0)
- Corrigiu uma falha com a Afirmação
failed: m_initiated
durante a inicialização da sessão de sincronização. (Núcleo 13.27.0) - Corrigida uma violação do TSAN em que o thread do usuário poderia correr para ler m_finalized com o loop de eventos de sincronização. (Núcleo 13.27.0)
- Correção de uma condição de corrida menor ao fazer backup de arquivos do Realm antes de uma reinício do cliente que poderia levar à substituição de um arquivo existente. (Núcleo 13.27.0)
- propriedade booleana
ChangeSet.IsCleared
que é verdadeira quando a coleção é limpa agora também é criada paraIDictionary
, alinhando-a aISet
eIList
. (Núcleo 14.0.0) - Corrigidas queries de igualdade nas propriedades
RealmValue
com um índice. (Núcleo 14.0.0) - Correção de uma falha que ocorria quando mais de 8388606 links apontavam para um objeto específico.
- Corrigiu resultados errados ao executar query do valor
NULL
emIDictionary
. (Núcleo 14.0.0) - Um Realm gerado em um dispositivo ARM 64 que não seja da Apple e copiado para outra plataforma (e vice-versa) não era portátil devido a uma diferença na ordem de classificação. Isso afeta strings ou binários que têm sua primeira diferença em um caractere não ascii. Esses itens podem não ser encontrados em um conjunto ou em uma coluna indexada se as strings tiverem um prefixo comum longo (> 200 caracteres). (Núcleo 14.0.0)
- Corrigido um problema ao remover itens de um LnkLst que poderia resultar em links invalidados tornando-se visíveis, o que poderia causar falhas ou exceções ao acessar esses itens da lista mais tarde. Isso afeta os domínios de sincronização em que outro cliente já havia removido um link em uma lista de links com mais de 1000 links e, em seguida, outras remoções locais da mesma lista fizeram com que a lista tivesse menos de 1000 itens. (Núcleo 14.2.0)
- Correção de um travamento espúrio relacionado à abertura de um Realm no thread em background enquanto o processo estava no meio da saída. (Núcleo 14.3.0)
- Corrige a abertura de domínio com usuário em cache enquanto resultados offline em erro fatal e sessão não tenta conexão novamente. (Núcleo 14.4.0)
- Corrigir uma falha de asserção "m_lock_info && m_lock_info->m_file.get_path() == m_filename" que parece estar relacionada à abertura de um Realm enquanto o arquivo está em processo de ser fechado em outro thread. (Núcleo 14.5.0)
- Corrigiu o histórico de desvios devido a um bug no código de replicação ao definir valores nulos padrão (objetos embarcados incluídos). (Núcleo 14.5.0)
- A exceção de ponteiro nulo pode ser acionada ao sair e as chamadas de resposta de commit assíncrono não são executadas. (Núcleo 14.5.0)
Compatibilidade
- Realm Studio: 15.0.0 ou posterior.
Interno
- Usando o Núcleo 14.5.1.
11.7.0 (2024-02-05)
Melhorias
- A recuperação automática de redefinição do cliente agora faz um trabalho melhor ao recuperar as alterações quando os conjuntos de alterações foram baixados do servidor depois que as alterações locais não carregadas foram confirmadas. Se o Realm local estivesse totalmente atualizado com o servidor antes da redefinição do cliente, a recuperação automática agora deve sempre produzir exatamente o mesmo estado como se nenhuma redefinição do cliente estivesse envolvida. (Núcleo 13.24.1)
- As exceções lançadas durante o aplicativo bootstrap agora serão exibidas ao usuário em vez de encerrar o programa com uma exceção sem tratamento. (Núcleo 13.25.0)
- Permita o uso de operadores
>
,>=
,<
,<=
em queriesRealm.Filter()
para constantes de string. Esta é uma comparação lexicográfica que diferencia maiúsculas de minúsculas. Desempenho aprimorado de RQL (.Filter()
) em uma propriedade de string de caracteres não vinculada usando: >, > =, <, <=, operadores e comportamento fixo de que uma string nula deve ser avaliada como menor que tudo, anteriormente os nulos não eram correspondidos . (Core 13.26.0-14-gdf25f) Session.GetProgressObservable
agora pode ser usado com o Flexible Sync. (Emissão #3478)
Corrigido
- A recuperação automática de reinício do cliente duplicaria as inserções em uma lista ao em recuperação uma gravação que tornasse uma alteração irrecuperável em uma lista (ou seja, modificando ou excluindo uma entrada pré-existente), seguida por uma alteração de assinatura , seguida por uma gravação que adicionou uma entrada à lista. (Núcleo 13.24.0)
- Durante a recuperação de uma reinício do cliente , um conjunto de links pode estar sem itens ou pode ser lançada uma exceção que impede a recuperação. (Núcleo 13.24.0)
- Durante uma redefinição de cliente com recuperação ao recuperar uma operação de movimentação ou definição em um
IList<RealmObject>
ouIList<RealmValue>
que operava em índices que também não foram adicionados na recuperação, os links para um objeto que havia sido excluído por outro cliente enquanto off-line seriam recriado pelo cliente em recuperação. Mas os objetos desses links só teriam a chave primária preenchida e todos os outros campos seriam valores padrão. Agora, em vez de criar esses objetos zoom, as listas que estão sendo recuperadas ignoram esses links excluídos. (Núcleo 13.24.0) - Os erros encontrados ao reaplicar alterações locais para a recuperação de reinício do cliente em sincronização baseada em partição resultariam na tentativa de reinício do cliente não sendo registrada, possivelmente resultando em um loop interminável de tentativas e falhas na recuperação automática da reinício do cliente. (Núcleo 13.24.0)
- Os conjuntos de alterações têm carimbos de data/hora errados se o relógio local atrasar 2015-01-01T00:00:00Z. O cliente de sincronização agora lança uma exceção se isso acontecer. (Núcleo 13.24.1)
- Se a primeira abertura de um Realm de Flexible Sync acionou uma redefinição de cliente, a configuração tinha uma chamada de resposta de assinaturas iniciais, antes e depois das chamadas de resposta de redefinição, e a chamada de resposta de assinatura inicial iniciava uma transação de leitura sem encerrá-la (que normalmente será o caso), abrir o Realm congelado para a chamada de resposta após a redefinição trigger uma exceção de MáVersão. (Núcleo 13.24.1)
- A recuperação automática de reinício do cliente em Realms de Flexible Sync aplicaria alterações recuperadas em várias transações de escrita, liberando o bloqueio de gravação entre elas. (Núcleo 13.24.1)
- Ter um nome de classe de comprimento 57 faria com que a reinício do cliente falhasse, pois um limite de 56 era aplicado erroneamente. (Núcleo 13.24.1)
- Foram corrigidas várias causas de exceções de "falha na descriptografia" que poderiam ocorrer ao abrir vários arquivos Realm criptografados no mesmo processo ao usar Apple/Linux e armazenar os Realms em um sistema de arquivos exFAT. (Núcleo 13.24.1)
- Corrigiu vários erros que poderiam causar uma falha no cliente de sincronização . (Núcleo 13.25.0)
- Desempenho ruim do download da sincronização inicial envolvendo muitos backlinks. (Núcleo 13.25.1)
- Aumentou explicitamente a versão mínima do System.Net.Security para 4.3.2 , pois 4.3.0 foi marcado como vulnerável (mais detalhes podem ser encontrados no aviso de depreciação na página NuGet).
- Lidar com EOPNOTSUPP ao usar posicionax_falocate() e fallback para consumir espaço manualmente. Isso deve permitir que os usuários do Android abram um Realm em sistemas de arquivos restritivos. (Núcleo 13.26.0)
- O aplicativo pode falhar com recebida_changesets.size() != 0 quando uma mensagem de download é confundida com uma mensagem de inicialização. Isso pode acontecer se a sessão de sincronização for pausada e retomada em um horário específico. (Núcleo 13.26.0)
- Corrigiu os erros de símbolos ausentes, como
__atomic_is_lock_free
no ARMv7 Linux (Core 13.26.0) - O upload dos conjuntos de alterações recuperados durante uma recuperação automática de redefinição do cliente pode levar a erros de "Versão incorreta do servidor" e a uma redefinição do novo cliente. (Core 13.26.0-14-gdf25f)
- Corrigiu dados inválidos na string de motivo do erro ao registrar uma notificação de alteração de assinatura após a assinatura já ter falhado. (Core 13.26.0-14-gdf25f)
Compatibilidade
- Realm Studio: 13.0.0 ou posterior.
Interno
- Usando Core v13.26.0-14-gdf25f.
11.6.1 (2023-11-17)
Corrigido
- Assinaturas FLX corrigidas que não eram enviadas para o servidor se a sessão fosse interrompida durante a inicialização. (Núcleo 13.23.3)
- As assinaturas FLX corrigidas não são enviadas ao servidor se uma mensagem de upload for enviada imediatamente após a confirmação de uma assinatura , mas antes de o cliente de sincronização verificar se há novas assinaturas. (Núcleo 13.23.3)
- Corrigiu a falha do aplicação com exceção 'KeyNotFound' quando as assinaturas são marcadas como concluídas após a reinício do cliente. (Núcleo 13.23.3)
- Uma falha em um momento muito específico durante a redefinição de um cliente DiscardLocal em um FLX Realm pode deixar as assinaturas em um estado inválido. (Núcleo 13.23.4)
- Correção de um erro "Alteração de esquema inválida (UPLOAD): não é possível processar a instrução AddColumn para tabela inexistente" ao usar o reinício do cliente automático com recuperação no modo de desenvolvimento para recuperar alterações de esquema feitas localmente enquanto estiver off-line. (Núcleo 13.23.4)
Compatibilidade
- Realm Studio: 13.0.0 ou posterior.
Interno
- Usando o Núcleo 13.23.4.
11.6.0 (2023-11-03)
Melhorias
Foi adicionado o método
App.EmailPasswordAuth.RetryCustomConfirmationAsync
para poder executar novamente a função de confirmação no servidor para um determinado e-mail. (Emissão #3463)Foi adicionado um evento
User.Changed
que pode ser usado para notificar os assinantes de que algo mudou no usuário - normalmente esse seria o estado do usuário ou o token de acesso. (Emissão #3429)Suporte adicionado para personalizar o atributo de ignorar aplicado em determinadas propriedades geradas de modelos de Realm . A opção de configuração é chamada
realm.custom_ignore_attribute
e pode ser definida em um arquivo de configuração global (mais informações sobre arquivos de configuração global podem ser encontradas na documentação do .NET). O gerador Realm tratará isso como uma string opaca, que será anexada aos atributosIgnoreDataMember
eXmlIgnore
já aplicados a esses membros. Os atributos devem ser totalmente qualificados, a menos que o namespace em que residem seja adicionado a um arquivo de usos global. Por exemplo, é assim que você adicionariaJsonIgnore
deSystem.Text.Json
:realm.custom_ignore_attribute = [System.Text.Json.Serialization.JsonIgnore]
(Emissão #2579)
O gerador de origem Realm agora emitirá um erro caso uma collection nas classes de modelo seja atribuída a um valor não nulo em um inicializador de propriedade ou em um construtor. As collections de Realm são inicializadas internamente e a atribuição de valores não nulos à propriedade não é suportada, onde a atribuição
null!
só é útil para silenciar avisos de tipos de referência anuláveis; na verdade, a collection nunca será nula. (Emissão #3455)O registro de erros do WebSocket tornou-se mais detalhado ao usar
AppConfiguration.UseManagedWebSockets = true
. #3459
Corrigido
- Foi adicionado um erro que é gerado quando classes de Realm baseadas em interface são usadas com uma versão de idioma inferior a 8.0. Ao mesmo tempo, removeu o uso de
not
no código gerado, para que ele seja compatível com uma versão mínima C# de 8.0. (Emissão #3265) - O login em um único usuário usando vários fornecedores de autenticação criou um SyncUser separado por fornecedor de autenticação. Isso funcionava principalmente, mas tinha algumas individualidades:
- As sessões de sincronização não seriam necessariamente associadas ao SyncUser específico usado para criá-las. Como resultado, consultar um usuário por suas sessões pode dar resultados incorretos, e desconectar um usuário pode fechar as sessões erradas.
- Os arquivos Realm sincronizados localmente existentes criados com a versão do Realm de agosto a novembro de 2020 às vezes não eram abertos corretamente e, em vez disso, eram baixados novamente.
- Remover um dos SyncUsers excluiria todos os arquivos do Realm locais para todos os SyncUsers desse usuário.
- Excluir o usuário do lado do servidor por meio de um dos SyncUsers deixou os outros SyncUsers em um estado inválido.
- Um SyncUser que foi originalmente criado por meio de login anônimo e depois vinculado a uma identidade ainda seria tratado como um usuário anônimo e removido totalmente ao sair. (Núcleo 13.21.0)
- Se um usuário fosse desconectado enquanto uma atualização do token de acesso estivesse em andamento, a conclusão da atualização marcaria o usuário como conectado novamente e o usuário estaria em um estado inconsistente (Core 13.21.0).
- Se estivesse executando uma query de um conjunto de dados geoespacial que tivesse alguns objetos com uma propriedade de tipo definida para algo diferente de "Ponto" (sem distinção entre maiúsculas e minúsculas), uma exceção teria sido lançada. Em vez de interromper a query, esses objetos agora são apenas ignorados. (Núcleo 13.21.0)
- Receber um erro write_not_allowed do servidor teria causado uma falha. (Núcleo 13.22.0)
- A atualização de assinaturas não trigger as atualizações automáticas do Realm , às vezes resultando em uma atualização assíncrona suspensa até que outra gravação fosse realizada por outra coisa. (Núcleo 13.23.1)
- Corrigir o bloqueio entre processos para o acesso simultâneo a arquivos de domínio, resultando em um bloqueio entre processos nos sistemas de arquivos FAT32/exFAT. (Núcleo 13.23.1)
Compatibilidade
- Realm Studio: 13.0.0 ou posterior.
Interno
- Usando o Núcleo 13.23.1.
11.5.0 (2023-09-15)
Melhorias
- Simplificou alguns dos códigos de erro relatados em
SessionException
. Alguns códigos de erro foram combinados e alguns foram descontinuados porque não são mais relatados pelo servidor. (Emissão #3295) - A Pesquisa de texto completo suporta a pesquisa apenas de prefixo. Por exemplo "descrição do Texto 'alex*'". (Núcleo 13.18.0)
- Erros de protocolo desconhecidos recebidos do Atlas Device Sync não causarão mais falha no aplicativo se uma ação de erro válida também for recebida. As ações de erro desconhecidas serão tratadas como uma ação de erro ApplicationBug e farão com que a sincronização falhe com um erro por meio do manipulador de erros de sincronização. (Núcleo 13.18.0)
- Suporte adicionado para mensagens de registro do servidor ativadas pelo protocolo de sincronização versão 10. A ID de solicitação do App Services será fornecida em uma mensagem de registro do servidor em uma futura versão do servidor . (Núcleo 13.19.0)
Corrigido
- Corrigiu a mensagem do
MissingMemberException
sendo lançado ao tentar acessar uma propriedade inexistente com a API dinâmica. (PR #3432) - Corrigiu um erro de compilação
Cannot marshal generic Windows Runtime types with a non Windows Runtime type as a generic type argument
ao usar .NET Native. (Emissão #3434, desde 11.4.0) - Corrija a afirmação com falha para erros desconhecidos do servidor de aplicativos. (Núcleo 13.17.2)
- Executar uma query sobre @keys em um dicionário lançaria uma exceção. (Núcleo 13.17.2)
- Corrigiu a falha no alocador de lajes (
Assertion failed: ref + size <= next->first
). (Núcleo 13.20.1) - O envio de mensagensUPLOAD vazias pode levar a erros de "versão incorreta do servidor" e ao reinício do cliente. (Núcleo 13.20.1)
Compatibilidade
- Realm Studio: 13.0.0 ou posterior.
Interno
- Usando o Núcleo 13.20.1.
11.4.0 (2023-08-16)
Melhorias
- Foi adicionada a API
IQueryable.SubscribeAsync
como uma abreviação para usarSubscriptionSet.Add
. É um açúcar de sintaxe que se traduz aproximadamente em:
Ele oferece um parâmetro para controlar se deve aguardar toda vez a sincronização ou apenas a primeira vez que uma assinatura é adicionada, bem como o suporte a token de cancelamento. (PR #3403)realm.Subscriptions.Update(() => { realm.Subscriptions.Add(query); }); await realm.Subscriptions.WaitForSynchronization(); // This can now be expressed as await query.SubscribeAsync();
- Foi adicionado um argumento opcional
cancellationToken
aSession.WaitForDownloadAsync/WaitForUploadAsync
. (PR #3403) - Foi adicionado um argumento opcional
cancellationToken
aSubscriptionSet.WaitForSynchronization
. (PR #3403) - Corrigiu uma corrupção rara de arquivos no formato de streaming (geralmente após compactar, converter ou copiar para um novo arquivo). (Núcleo 13.17.1)
- Tentando pesquisar índices de texto completo criados como resultado de uma mudança de esquema aditiva (ou seja, aplicar as diferenças entre o esquema local e o esquema de um domínio sincronizado) poderia ter resultado em um erro de IllegalOperation com o código de erro
Column has no fulltext index
. (Núcleo 13.17.1) - O progresso da sincronização de mensagens DOWNLOAD do estado do servidor foi atualizado incorretamente. Isso pode ter resultado em uma viagem extra de ida e volta para o servidor. (Núcleo 13.17.1)
- Adicionou a opção para usar WebSockets gerenciados (
System.Net.WebSockets.ClientWebSocket
) em vez do cliente WebSocket integrado do Realm para tráfego de sincronização. Os WebSockets gerenciados oferecem suporte aprimorado para proxies e firewalls que exigem autenticação. Esse recurso está atualmente ativado e pode ser ativado definindoAppConfiguration.UseManagedWebSockets
como true. Os WebSockets gerenciados se tornarão o padrão em uma versão futura. (PR #3412). - Foi corrigido um problema que faria com que
realm.SyncSession
fosse coletado mesmo quando houver assinantes dorealm.SyncSession.PropertyChanged
.
Corrigido
- Corrigida uma condição de corrida entre o cancelamento de uma transação de gravação assíncrona e o fechamento do arquivo Realm, que poderia resultar na geração de um
ObjectDisposedException : Safe handle has been closed
. (PR #3400) - Foi corrigido um problema em que, no caso extremamente raro de uma exceção ser lançada por
Realm.RefreshAsync
, essa exceção teria sido ignorada efalse
teria sido retornado. (PR #3400) - Corrigiu a anotação de nulidade de
SubscriptionSet.Find
para indicar corretamente quenull
é devolvido se a assinatura não existir no conjunto de assinaturas. (PR #3403) - Foi corrigido um problema em que a execução de queries
Filter
usando propriedades remapeadas só funcionava com o nome nativo em vez do gerenciado. Agora ambos funcionarão - por exemplo:
(Emissão #3149)partial class MyModel : IRealmObject { [MapTo("Bar")] public int Foo { get; set; } } // Both of these are valid now realm.All<MyModel>().Filter("Foo > 5"); realm.All<MyModel>().Filter("Bar > 5");
Compatibilidade
- Realm Studio: 13.0.0 ou posterior.
Interno
- Usando o Núcleo 13.17.1
11.3.0 (2023-07-26)
Mudanças de última hora
AppConfiguration.LocalAppName
eAppConfiguration.LocalAppVersion
foram descontinuados e serão removidos em uma versão futura. Eles nunca tiveram efeito, pois os valores fornecidos pelo SDK nunca foram enviados para o servidor. (PR #3387)
Melhorias
- Foram adicionadas propriedades
App.BaseFilePath
,App.BaseUri
eApp.Id
que retornam os valores fornecidos emAppConfiguration
. (PR #3385) - Foi adicionada a propriedade
AppConfiguration.UseAppCache
que controla se a instânciaApp
retornada deApp.Create
deve ser armazenada em cache ou não. A recomendações geral é não defini-lo (ou seja, deixe o valor padrão detrue
), mas pode ser útil ao escrever testes de unidade. (Emissão #3382).
Corrigido
- Corrigiu uma falha do Editor Unity quando o domínio era recarregado enquanto uma operação
Realm.GetInstanceAsync
estava em andamento. (Emissão #3344) - Corrigiu a implementação
App.Equals
eApp.GetHashCode
para retornar resultados corretos, especialmente quando a instânciaApp
é armazenada em cache. (PR #3385) - Foi corrigido um problema em que a compilação para Android no Unity falhava com "Não foi possível analisar a montagem do usuário. Referência de objeto não definida para uma instância de um objeto". (Emissão #3380)
- Uma GeoBox agora é apenas um atalho para o GeoPolygon equivalente. Isso fornece resultados consistentes de query e verificação de erros. (Núcleo 13.15.2)
- Corrigiu vários casos de canto (por exemplo. em torno dos pólos) onde pontos inválidos corresponderam a uma query geoWithin. (Núcleo 13.15.2)
- Corrigido um erro durante a abertura assíncrona e a redefinição do cliente se as propriedades tivessem sido adicionadas ao esquema. Essa correção se aplica à migração de PBS para FLX se a abertura assíncrona for usada. (Núcleo 13.16.1)
Compatibilidade
- Realm Studio: 13.0.0 ou posterior.
Interno
- Usando o Núcleo 13.17.0
11.2.0 (2023-07-07)
Melhorias
- Foram adicionadas verificações de validação para os construtores do tipo geoespacial. Isto significa que uma exceção agora será lançada ao construir uma forma geoespacial inválida em vez de usá-la em uma query. (PR #3362)
- Relaxadas algumas validações ao invocar
IndexOf(null)
em uma coleção de tipos não anuláveis. Anteriormente, isso lançaria umArgumentNullException
, enquanto agora retornará-1
. Isso é particularmente útil para cenários de vinculação de dados em que o mecanismo de vinculação pode invocá-lo comoIndexOf(SelectedItem)
, que lançaria uma exceção quandoSelectedItem
estivernull
. (PR #3369) - Implementação do
RealmSet.IndexOf
alterada para retornar o resultado real em vez de jogar umNotSupportedException
. A ordem dos conjuntos persistentes ainda não é determinística, mas é estável entre as transações de escrita. Novamente, isso é útil principalmente para cenários de vinculação de dados em que o conjunto é passado como um contexto de vinculação para um controle de coleção. (PR #3369)
Corrigido
- Corrigido um problema no Unity no Windows quando o tecelão trigger a abertura excessiva de Windows de terminal. (Emitir [3364]https://github.com/ Realm/realm-dotnet/issues/3364)
- Foi corrigido um problema no Unity em CI em que a tecelagem falhava com o seguinte erro:
Could not analyze the user's assembly. Cannot access a closed Stream.
. (Emissão [3364]https://github.com/realm/realm-dotnet/issues/3364) - Corrigiu um
NullReferenceException
ao criar classes no Unity no modo de lote . (Emissão #3363)
Compatibilidade
- Realm Studio: 13.0.0 ou posterior.
Interno
- Usando o Núcleo 13.15.0
11.1.2 (2023-06-20)
Corrigido
- Foi corrigido um problema de namespace que causaria falha na compilação dos projetos Android do Maui devido a
'Realm' is a namespace but is used like a type
. (Emissão #3351)
Compatibilidade
- Realm Studio: 13.0.0 ou posterior.
Interno
- Usando o Núcleo 13.15.0
11.1.1 (2023-06-19)
Corrigido
- Foi corrigido um problema de namespace que causaria falha na criação de projetos Unity devido a
'Realm' is a namespace but is used like a type
. (Emissão #3351) - Melhorou a mensagem de aviso ao adicionar atributos de Realm em uma propriedade não persistente. (Emissão #3352)
Compatibilidade
- Realm Studio: 13.0.0 ou posterior.
Interno
- Usando o Núcleo 13.15.0.
11.1.0 (2023-06-17)
Melhorias
- Descontinuar os pacotes
Realm.SourceGenerator
eRealm.Fody
. Os conjuntos de geração de origem e de tecelão agora estão contidos no pacote principalRealm
. Esta deve ser uma alteração transparente para os usuários que apenas referenciaram o pacoteRealm
, mas se você adicionou explicitamente uma referência de pacote aoRealm.SourceGenerator
ouRealm.Fody
, deverá removê-la. (PR #3319) - Lidar automaticamente com migrações
RealmObject
->EmbeddedObject
duplicando objetos referenciados por vários pais, bem como removendo objetos "órfãos". (Emissão #2408) - Novos notificadores podem agora ser registrados em transações de escrita até que as alterações tenham sido realmente feitas na transação de escrita. Isso faz com que novas notificações possam ser registradas dentro de notificações de alteração acionadas pelo início de uma transação de escrita (a menos que um retorno de chamada anterior tenha executado gravações). (Núcleo 13.10.1)
- A migração baseada em partições para Flexible Sync para migrar um aplicativo cliente que usa sincronização baseada em partição para usar a Flexible Sync sob o capô se o servidor tiver sido migrado para a Flexible Sync for oficialmente suportada com esta versão. Qualquer cliente que use uma versão mais antiga do Realm (incluindo o suporte original lançado no Core 11.0.0) receberá uma mensagem de erro "Alternar para Flexible Sync" ao tentar sincronizar com o aplicativo. (Núcleo 13.11.0)
- Suporte a classificação/distinção com base em valores de um dicionário, por exemplo
.Filter("TRUEPREDICATE SORT(meta['age'])")
. (Núcleo 13.14.0) - Suporte inicial adicionado para queries geoespaciais em pontos. (Emissão #3299)
- Nesta versão, somente queries do formato "este ponto está contido nesta forma" (equivalente a $geoWithin no MongoDB) são suportadas.
- No momento, não há suporte a índices.
- Não existe um tipo dedicado para pontos geoespaciais persistentes. Em vez disso, os pontos devem ser armazenados como objeto incorporado em forma de GeoJson e as consultas usarão a digitação de Duck para verificar se a forma contém o objeto. Para conveniência, aqui está um exemplo de objeto incorporado que você pode usar no lugar de um tipo dedicado fornecido pelo Realm:
public partial class Location : IEmbeddedObject { // The coordinates and type properties are mandatory but may be private. // You can add more fields if necessary - those will be ignored when doing // geospatial queries. [MapTo("coordinates")] private IList<double> Coordinates { get; } = null!; [MapTo("type")] private string Type { get; set; } = "Point"; public double Latitude => Coordinates.Count > 1 ? Coordinates[1] : throw new Exception($"Invalid coordinate array. Expected at least 2 elements, but got: {Coordinates.Count}"); public double Longitude => Coordinates.Count > 1 ? Coordinates[0] : throw new Exception($"Invalid coordinate array. Expected at least 2 elements, but got: {Coordinates.Count}"); public Location(double latitude, double longitude) { // According to the GeoJson spec, longitude must come first in the // coordinates array. Coordinates.Add(longitude); Coordinates.Add(latitude); } } // Example usage public partial class Company : IRealmObject { public Location Location { get; set; } }
- Três novos tipos de forma e um tipo de ponto assistente foram adicionados para permitir a verificação da contenção:
GeoPoint
: um bloco de construção para os outros tipos de forma - ele não pode ser usado como um tipo de propriedade em seus modelos e destina-se apenas a construir os outros tipos de forma. Pode ser construído implicitamente a partir de uma tupla de valor de latitude e longitude:var point = new GeoPoint(latitude: 12.345, longitude: 67.890); var point = (12.345, 67.890);
GeoCircle
: uma forma representando um círculo em uma esfera construída a partir de um centro e um raio:var circle = new GeoCircle(center: (12.34, 56.78), radius: 10); // radius in radians var circle = new GeoCircle((12.34, 56.78), Distance.FromKilometers(10));
GeoBox
: uma forma representando uma caixa em uma esfera construída a partir de seus cantos inferior esquerdo e superior direito:var box = new GeoBox((12.34, 56.78), (15.34, 59.78));
GeoPolygon
: um polígono arbitrário construído a partir de um anel externo e orifícios opcionais:var polygon = new GeoPolygon((10, 10), (20, 20), (0, 20), (10, 10)); // a triangle with no holes var outerRing = new GeoPoint[] { (10, 10), (20, 20), (0, 20), (10, 10) }; var hole1 = new GeoPoint[] { (1, 1), (2, 2), (0, 2), (1, 1) }; var hole2 = new GeoPoint[] { (5, 5), (6, 6), (4, 6), (5, 5) }; var polygon = new GeoPolygon(outerRing, hole1, hole2); // A triangle with two smaller triangular holes
- A query pode ser feita via LINQ ou RQL:
var matches = realm.All<Company>().Where(c => QueryMethods.GeoWithin(c.Location, circle)); var matches = realm.All<Company>().Filter("Location GEOWITHIN $0", circle);
- Suporte a classificação/distinção com base em valores de um dicionário, por exemplo
realm.All<MyModel>().Filter("TRUEPREDICATE SORT(meta['age'])")
. (Núcleo 13.14.0) - Corrigiu uma possível falha ao abrir o Realm após não conseguir baixar um novo Realm FLX durante um reinício do cliente automático . (Núcleo 13.14.0)
Corrigido
- Correção de um erro fatal (relatado ao manipulador de erros de sincronização) durante a reinício do cliente (ou migração automática de PBS para FLX) se a redefinição tiver sido acionada durante uma abertura assíncrona e o esquema que está sendo aplicado tiver adicionado novas classes. (Núcleo 13.11.0)
- A Pesquisa de Texto Completo às vezes encontra palavras onde a palavra corresponde apenas ao início do token do Atlas Search. (Núcleo 13.11.0)
- Podeamos falhar ao remover backlinks nos casos em que os links para a frente não tinham um backlink correspondente devido à corrupção. Agora ignoramos silenciosamente essa inconsistência nas compilações de versão, permitindo que o aplicativo continue. (Núcleo 13.12.0)
IDictionary<string, IRealmObject?>
exporia links não resolvidos em vez de mapeá-los para nulo. Além de permitir que objetos inválidos fossem lidos a partir de dicionários, isso resultava em queries sobre dicionários, às vezes com resultados incorretos. (Núcleo 13.12.0)- A atualização do token de acesso para websockets não estava atualizando os metadados de localização. (Núcleo 13.13.0)
- O uso de transações síncronas e assíncronas no mesmo thread ou agendador pode atingir a falha de asserção "!realm.is_in_transaction()" se uma das chamadas de resposta para uma transação assíncrona fosse agendada durante uma transação síncrona. (Núcleo 13.13.0)
- Corrigiu uma possível falha ao abrir o Realm após não conseguir baixar um novo Realm FLX durante um reinício do cliente automático . (Núcleo 13.14.0)
- Definindo uma propriedade que contém um objeto incorporado para o mesmo objeto incorporado usado para lançar uma exceção com o texto
Can't link to an embedded object that is already managed
. Agora é um no-op. (Emissão #3262)
Compatibilidade
- Realm Studio: 13.0.0 ou posterior.
Interno
- Usando o Núcleo 13.15.0.
- Foi revisada e estendida a collection de métricas do SDK para melhor direcionar o esforço de desenvolvimento futuro. (PR #3209)
11.0.0 (2023-05-08)
Alterações interruptivas
- O argumento
error
emNotificationCallbackDelegate
eDictionaryNotificationCallbackDelegate
usado em*collection*.SubscribeForNotifications
foi removido. Não é usado há muito tempo, pois alterações internas no banco de banco de dados impediram a ocorrência de erros durante as chamadas de resposta de notificação. (Emissão #3014) RealmObjectBase.GetBacklinks
removido - em vez disso, deve ser usadoRealmObjectBase.DynamicApi.GetBacklinksFromType
. (Emissão #2391)Realm.DynamicApi.CreateObject(string, object)
foi removido e substituído por sobrecargas mais especializadas:RealmObjectBase.DynamicApi.CreateObject(string)
pode ser usado para criar um objeto sem uma chave primária.RealmObjectBase.DynamicApi.CreateObject(string, string/long?/ObjectId?/Guid?)
pode ser usado para criar um objeto com uma chave primária do tipo correspondente.
- A API exposta por
Realm.DynamicApi
não retorna maisdynamic
, optando por retornar tipos concretos, comoIRealmObject
,IEmbeddedObject
e assim por diante. Você ainda pode converter os objetos retornados paradynamic
e Go por meio da API dinâmica , mas isso geralmente tem menos desempenho do que usar a API baseada em strings, comoIRealmObjectBase.DynamicApi.Get/Set
, especialmente em plataformas AOT, como iOS ou Unity. (Emissão #2391) Realm.WriteAsync(Action<Realm>)
removido em favor deRealm.WriteAsync(Action)
. O novo métodoWriteAsync
introduzido no 10.14.0 é mais eficiente e não requer a reabertura do Realm em um thread em background. Embora não seja recomendado, se você preferir obter o comportamento antigo, pode escrever um método de extensão como:
(PR #3234)public static async Task WriteAsync(this Realm realm, Action<Realm> writeAction) { await Task.Run(() => { using var bgRealm = Realm.GetInstance(realm.Config); bgRealm.Write(() => { writeAction(bgRealm); }); }); await realm.RefreshAsync(); }
InMemoryConfiguration.EncryptionKey
removido. Nunca foi possível criptografar Realms na memória e definir essa propriedade teria resultado em erros de tempo de execução. (PR #3236)- Removido
SyncConfiguration
- usePartitionSyncConfiguration
ouFlexibleSyncConfiguration
em vez disso. (PR #3237) Realm.GetSession
removido - useRealm.SyncSession
em vez disso. (PR #3237)DiscardLocalResetHandler
removido - useDiscardUnsyncedChangedHandler
em vez disso. (PR #3237)Session.SimulateClientReset
extensões removidas. Eles não funcionaram com manipuladores de redefinição automática e foram mais confusos do que úteis. (PR #3237)AppConfiguration.CustomLogger
eAppConfiguration.LogLevel
removidos - useLogger.Default
eLogger.LogLevel
em vez disso. (PR #3238)RealmConfigurationBase.ObjectClasses
removido - useRealmConfigurationBase.Schema
em vez disso. (PR #3240)ObjectSchema.IsEmbedded
removido - useObjectSchema.BaseType
em vez disso. (PR #3240)ObjectSchema.Builder.IsEmbedded
removido - useObjectSchema.Builder.RealmSchemaType
em vez disso. (PR #3240)ObjectSchema.Builder(string name, bool isEmbedded = false)
removido - useBuilder(string name, ObjectSchemaType schemaType)
em vez disso. (PR #3240)RealmSchema.Find
removido - useRealmSchema.TryFindObjectSchema
em vez disso. (PR #3240)User.GetPushClient
removido porque ficou obsoleto no Atlas App Services - consulte https://www.mongodb.com/pt-br/docs/atlas/app-services/reference/push-notifications/. (PR #3241)- evento
SyncSession.Error
removido - useSyncConfigurationBase.OnSessionError
ao abrir um Realm . (PR #3241) - O construtor sem parâmetros foi removido para
ManualRecoveryHandler
- use o que recebe uma chamada de resposta de resposta. (PR #3241) RealmValue.AsString
agora lançará uma exceção se o valor contivernull
. Se você deseja obter uma string anulável, useAsNullableString
. (PR #3245)RealmValue.AsData
agora lançará uma exceção se o valor contivernull
. Se você deseja obter umbyte[]
anulável, useAsNullableData
. (PR #3245)RealmValue.AsRealmObject
agora lançará uma exceção se o valor contivernull
. Se você deseja obter uma string anulável, useAsNullableRealmObject
. (PR #3245)Realm.SyncSession
agora lançará um erro se o Realm não for aberto comPartitionSyncConfiguration
ouFlexibleSyncConfiguration
- antes de retornarnull
. (PR #3245)Realm.Subscriptions
agora lançará um erro se o Realm não for aberto com umFlexibleSyncConfiguration
- antes de retornarnull
. (PR #3245)PermissionDeniedException
removido porque não era mais possível obtê-lo. (Emissão #3272)- Foram removidos alguns códigos de erro obsoletos do enumeração
ErrorCode
. Todos os códigos removidos ficaram obsoletos e não foram mais emitidos pelo servidor. (PR 3273) IncompatibleSyncedFileException
removido porque não era mais possível obtê-lo. (Emissão #3167)- A API
Realms.Schema.Property
agora usaIndexType
em vez de um booleano indicando se uma propriedade é indexada. (Emissão #3281) - Os métodos de extensão em
StringExtensions
(Like
,Contains
) estão agora obsoletos. Em vez disso, use os idênticos emQueryMethods
- por exemplorealm.All<Foo>().Where(f => f.Name.Like("Mic*l"))
precisaria ser reescrito comorealm.All<Foo>().Where(f => QueryMethods.Like(f.Name, "Mic*l"))
.
Melhorias
- Foram adicionadas anotações de nulidade à montagem do Realm. Agora, os métodos que retornam tipos de referência são anotados corretamente para indicar se o valor retornado pode ou não ser nulo. (Emissão #3248)
- Substituindo um valor em um índice (ou seja,
myList[1] = someObj
) agora gerará corretamenteCollectionChange
notificações com a açãoReplace
. (Emissão #2854) - Agora é possível alterar o nível de registro a qualquer ponto da vida útil do aplicativo. (PR #3277)
- Algumas mensagens de registro foram adicionadas ao banco de banco de dados Core . Eventos, como abrir um Realm ou confirmar uma transação agora serão registrados. (Emissão #2910)
- Foi adicionado suporte para queries de texto completo do Atlas Search (termo simples). (Emissão #3281)
- Para habilitar queries FTS nas propriedades da string, adicione o atributo
[Indexed(IndexType.FullText)]
. - Para executar queries LINQ, use
QueryMethods.FullTextSearch
:realm.All<Book>().Where(b => QueryMethods.FullTextSearch(b.Description, "fantasy novel"))
. - Para executar queries
Filter
, utilize o operadorTEXT
:realm.All<Book>().Filter("Description TEXT $0", "fantasy novel")
.
- Para habilitar queries FTS nas propriedades da string, adicione o atributo
- Melhoria de desempenho para as seguintes queries (Núcleo 13.8.0):
- Melhoria significativa (~75% ao contar (
IQueryable.Count()
) o número de correspondências exatas (sem outras condições de query) em uma propriedade de string/int/UUID/ObjectId que tenha um índice. Esta melhoria será especialmente notável se houver um grande número de resultados retornados (valores duplicados). - Melhoria significativa (~99% ao executar query de uma correspondência exata em uma propriedade
DateTimeOffset
que tenha um índice. - Melhoria significativa (~99% ao executar query de uma correspondência insensível a maiúsculas e minúsculas em uma propriedade
RealmValue
que tenha um índice. - Melhoria moderada (~25 ) ao executar query de uma correspondência exata em uma propriedade booleana que tenha um índice.
- Pequena melhoria (~5% ao executar query de uma correspondência insensível a maiúsculas e minúsculas em uma propriedade
RealmValue
que não tem um índice. - Melhoria moderada (~30 ) das consultas de igualdade em um
RealmValue
não indexado.
- Melhoria significativa (~75% ao contar (
- Habilite vários processos para operar em um Realm criptografado simultaneamente. (Núcleo 13.9.0)
- Melhore o desempenho da reversão das transações de escrita depois de fazer alterações. Se nenhum evento de notificação estiver registrado, agora é um tempo constante, em vez de um tempo proporcional ao número de alterações a serem revertidas. As reversões quando há assinaturas de notificações são 10-20% mais rápidas. (Núcleo 13.9.4)
- Migração de PBS para FLX para migrar um aplicativo cliente que usa sincronização baseada em partição para usar a sincronização flexível sob o capô se o servidor tiver sido migrado para a sincronização flexível. (Núcleo 13.10.0)
Corrigido
- Corrigido um problema que poderia causar uma exceção
The specified table name is already in use
ao criar um novo Arquivo de Realm em vários threads. (Emissão #3302) - Corrigido um bug que pode ter resultado em arrays em ordens diferentes em dispositivos diferentes. Alguns casos de "Tamanho_prior inválido" também podem ser corrigidos. (Núcleo 13.7.1)
- Correção de uma falha ao executar query de uma propriedade
RealmValue
com um operador de string (contains/like/beginswith/endswith) ou com insensibilidade a maiúsculas e minúsculas. (Núcleo 13.8.0) - A query da igualdade de uma string em uma propriedade
RealmValue
indexada estava retornando correspondências insensíveis a maiúsculas e minúsculas. Por exemplo, a query demyIndexedValue == "Foo"
corresponderia incorretamente aos valores de "foo" ou "FOO" etc. (Core 13.8.0) - Adicionar um índice a uma propriedade
RealmValue
em uma tabela não vazia falharia com uma afirmação. (Núcleo 13.8.0) SyncSession.Stop()
pode manter uma referência ao banco de dados aberto após encerrar a sessão de sincronização, impedindo que os usuários possam excluir o realm. (Núcleo 13.8.0)- Correção de uma falha do Stack Overflow ao usar o analisador de query com longas cadeias de condições E/OU. (Núcleo 13.9.0)
ClientResetException.InitiateClientReset()
não ignora mais o resultado de tentar remover um domínio. Isso poderia ter resultado em uma ação de redefinição do cliente sendo relatada como bem-sucedida quando, na verdade, falhou no Windows se oRealm
ainda estivesse aberto. (Núcleo 13.9.0)- Corrigir uma corrida de dados em que, se um thread confirmasse uma transação de escrita que aumentasse o número de versões ativas acima da mais alta anterior vista durante a sessão atual, ao mesmo tempo em que outro thread iniciava uma leitura, o thread de leitura poderia ler de um não mais mapeamento de memória válido (Core 13.9.0).
- Executando uma query como
{1, 2, 3, ...} IN list
onde a array é maior que 8 e todos os elementos são menores que alguns valores na lista, o programa falharia (Core 13.9.4) - A realização de um grande número de queries sem nunca executar uma gravação resultou no aumento constante do uso de memória, parte da qual nunca foi totalmente liberada devido a um cache ilimitado (Core 13.9.4)
Compatibilidade
- Realm Studio: 13.0.0 ou posterior.
Interno
- Usando o Núcleo 13.10.0.
10.21.1 (2023-04-21)
Corrigido
- Correção de uma falha que ocorre quando o servidor envia um erro PermissionDenied. (Emissão #3292)
Compatibilidade
- Realm Studio: 13.0.0 ou posterior.
Interno
- Usando o Núcleo 13.6.0.
10.21.0 (2023-03-24)
Melhorias
- Foi adicionado
SyncConfiguration.CancelAsyncOperationsOnNonFatalErrors
que controla se as operações assíncronas (comoRealm.GetInstanceAsync
,Session.WaitForUploadAsync
e assim por diante) devem lançar uma exceção sempre que ocorrer um erro de sessão não fatal. (Emissão #3222) - Foi adicionado
AppConfiguration.SyncTimeoutOptions
, que tem várias propriedades que controlam o tempo limite de sincronização, como o tempo limite da conexão, intervalos de ping-pong e outros. (Emissão #3223) - Atualizamos algumas das exceções lançadas pelo SDK para alinhá-las melhor com as exceções do sistema e incluir mais informações – por exemplo, agora lançaremos
ArgumentException
quando argumentos inválidos forem fornecidos em vez deRealmException
. (Emissão #2796) - Foi adicionada uma nova exceção -
CompensatingWriteException
que contém informações sobre as gravações que foram revertidas pelo servidor devido a permissões. Ele será passado para a chamada de respostaFlexibleSyncConfiguration.OnSessionError
fornecida da mesma forma que outros erros de sessão. (Emissão #3258) - Suporte adicionado para Linux Arm/Arm64 em aplicativos .NET. (Emissão #721)
Corrigido
- Alterou a forma como o Realm SDK registra BsonSerializers. Anteriormente, ele os registrava indiscriminadamente por meio
BsonSerializer.RegisterSerializer
, o que entraria em conflito se seu aplicativo estivesse usando o pacoteMongoDB.Bson
e definisse seus próprios serializadores paraDateTimeOffset
,decimal
ouGuid
. Agora, o registro acontece viaBsonSerializer.RegisterSerializationProvider
, o que significa que os serializadores padrão usados pelo SDK podem ser substituídos chamandoBsonSerializer.RegisterSerializer
a qualquer ponto antes de um serializador ser instanciado ou chamandoBsonSerializer.RegisterSerializationProvider
depois de criar um aplicativo/abrir um Realm. (Emissão #3225) - Criar assinaturas com queries com parâmetros unicode causa um erro no servidor. (Núcleo 13.6.0)
- Foi corrigido um problema com o Unity 2022 e versões posteriores que resultaria em falhas de compilação com o erro
Specified method is not supported
. (Emissão #3306)
Compatibilidade
- Realm Studio: 13.0.0 ou posterior.
Interno
- Usando o Núcleo 13.6.0.
- Cancele as compilações existentes quando um novo commit for enviado para um PR. (PR #3260)
10.20.0 (2023-02-10)
Versão de formato de arquivo alterada. Os arquivos antigos serão atualizados automaticamente, mas não podem ser downgrade e abertos com versões mais antigas do .NET SDK.
Mudanças de última hora
User.GetPushClient
foi descontinuado, pois será desativado em breve no servidor. (Emissão #3073)
Melhorias
O arquivo de domínio será reduzido se o tamanho do arquivo maior não for mais necessário. (Núcleo 13.0.0)
A maior parte do crescimento de arquivos causado pela fixação de versão é eliminada. (Núcleo 13.0.0)
Melhore o desempenho da aquisição de bloqueios de leitura quando um bloqueio de leitura para essa versão já for mantido. Isso acelera muitas operações relacionadas a notificações de alteração e, em particular, à atualização de um Realm que tem notificadores de alteração registrados. (Núcleo 13.2.0)
Atualize o OpenSSL de 1.1.1n para 3.0.7. (Núcleo 13.2.0)
Agora é possível converter domínios de sincronização flexíveis em domínios locais e agrupados (Core 13.2.0)
Adicione suporte para classes aninhadas para classes geradas de origem. (Emissão #3031)
Suporte aprimorado para tipos de referência anuláveis na definição do modelo para classes geradas na origem. Isso permite usar os modelos de Realm como de costume quando o contexto anulável está ativo e remove a necessidade de usar o atributo
Required
para indicar as propriedades obrigatórias, pois essas informações serão inferidas diretamente do status de nulidade. Há algumas considerações sobre a nulidade das propriedades que se vinculam ao objeto de Realm :- As propriedades vinculadas a um único objeto de realm são inerentemente anuláveis e, portanto, o tipo deve ser definido como anulável.
- List, Sets e Backlinks não podem conter objetos nulos e, portanto, o parâmetro de tipo deve ser não anulável.
- Dicionários podem conter valores nulos e, portanto, o parâmetro de tipo deve ser anulável.
Definir as propriedades com uma anotação de nulidade diferente da que foi descrita aqui criará um erro de diagnóstico. Por exemplo:
public partial class Person: IRealmObject { //Single values public Dog? MyDog { get; set; } //Correct public Dog MyDog { get; set; } //Error //List public IList<Dog> MyDogs { get; } //Correct public IList<Dog?> MyDogs { get; } //Error //Set public ISet<Dog> MyDogs { get; } //Correct public ISet<Dog?> MyDogs { get; } //Error //Dictionary public IDictionary<string, Dog?> MyDogs { get; } //Correct public IDictionary<string, Dog> MyDogs { get; } //Error //Backlink [Realms.Backlink("...")] public IQueryable<Dog> MyDogs { get; } //Correct [Realms.Backlink("...")] public IQueryable<Dog?> MyDogs { get; } //Error }
Observamos que alguns desenvolvedores ainda prefeririam ter mais flexibilidade na anotação de nulidade de tais propriedades, e é possível fazer isso definindo
realm.ignore_objects_nullability = true
em um arquivo de configuração global (mais informações sobre arquivos de configuração global podem ser encontradas em . documentação .NET). Se isso estiver ativado, todas as propriedades anteriores serão consideradas válidas e as anotações de nulidade para propriedades vinculadas a objetos serão ignoradas.Desempenho aprimorado de notificações do
PropertyChanged
eCollectionChanged
. (Emissão #3112)Adicionado suporte para tvOS em Xamarin/Maui e Unity . (Emissão #3161)
Melhorar o desempenho de
Realm.Freeze()
. (Núcleo 13.3.0)
Corrigido
ISet<RealmValue>
considere string e dados binários equivalentes. Isso pode fazer com que o cliente seja inconsistente com o servidor se uma string e alguns dados binários com conteúdo equivalente forem inseridos do Atlas. (Núcleo 13.0.0)- Corrigiu a afirmação errada sobre um erro de query que poderia resultar em uma falha. (Núcleo 13.1.0)
- Corrigido um problema que impedia a abertura de um arquivo criptografado em um dispositivo com um tamanho de página maior do que aquele em que o arquivo foi produzido. (Núcleo 13.1.1)
- Corrigiu a possível segfault no cliente de sincronização em que a chamada de resposta assíncrona estava usando o objeto após ser desalocada (Núcleo 13.2.0)
- Corrigiu a falha ao usar a redefinição do cliente com recuperação e Flexible Sync com uma única assinatura (Core 13.2.0)
- Foi adicionada uma mensagem de erro mais descritiva quando a propriedade de um modelo não é suportada. Agora, ele sugerirá que o tipo de destino pode precisar herdar de
RealmObject
. (Emissão #3162) - Descartar uma Instância de Realm enquanto uma transação ativa estiver em execução agora reverterá corretamente a transação. (Emissão #2924)
- Corrigido um problema que faria com que
PropertyChanged
notificações fossem entregues para propriedades da coleção quando o conteúdo da coleção fosse modificado, mesmo que a coleção em si não fosse substituída. (Emissão #3112) - Foi corrigido um problema em que a união de montagens no Unity poderia resultar em
System.InvalidOperationException
. (Emissão #3199) Session.Stop
agora manterá corretamente a sessão interrompida até queSession.Start
seja chamado. Anteriormente, havia uma série de circunstâncias que poderiam fazer com que a sessão fosse retomada, mesmo que não fossem explicitamente solicitadas. (Núcleo 13.3.0)- Quando a redefinição do cliente com recuperação é usada e a recuperação não resulta em novos commits locais, o cliente de sincronização pode ter ficou preso em um ciclo com um erro fatal durante a redefinição do cliente: 'Redefinição do modo de 'Recuperação' anterior de
não teve êxito, desistindo do modo "Recuperação" para evitar uma mensagem de erro de ciclo. (Núcleo 13.3.0) - Corrigiu o histórico divergente em Flexible Sync se as gravações ocorressem durante o bootstrap para objetos que acabou de entrar em exibição. (Núcleo 13.3.0)
- Corrija várias corridas de dados ao abrir Realms congelados em cache. Novos Realms congelados foram adicionados ao cache e a trava liberada antes de serem totalmente inicializados, resultando em corridas se fossem imediatamente lidos do cache em outro thread. (Núcleo 13.3.0)
- Se um reinício do cliente com recuperação ou descarte local for interrompido enquanto o domínio "novo" estiver sendo baixado, o cliente de sincronização poderá falhar com uma exceção do MultiSyncAgents. (Núcleo 13.3.0)
- Os conjuntos de alterações do servidor enviado durante a inicialização do FLX que forem maiores que 16MB podem fazer com que o cliente de sincronização falhe com um LogicError. (Núcleo 13.3.0)
- O compartilhamento de arquivos Realm entre um aplicativo Catalyst e o Realm Studio não sincronizou corretamente o acesso ao Arquivo de Realm. (Núcleo 13.4.0)
Compatibilidade
- Realm Studio: 13.0.0 ou posterior.
Interno
- Usando o Núcleo 13.4.0.
- Atualizou
DynamicRealmObjectHelper.TryGetPrimaryKeyValue
para não utilizar reflexão. (Emissão #3166) - Corrigiu o fluxo de trabalho dos testes UWP ao executar uma compilação de depuração. (Emissão #3030)
10.19.0 (2023-01-06)
Melhorias
Removida serialização/deserialização redundante de argumentos em CallAsync. (Emissão #3079)
Foi adicionado um campo
Transaction.State
que descreve o estado atual da transação. (Emissão #2551)Mensagem de erro aprimorada quando nulo é passado como argumento para params para EmailPasswordAuth.CallResetPasswordFunctionAsync. (Emissão #3011)
Removidos os campos de backup das propriedades das classes geradas, o que deve fornecer pequenas melhorias na memória usada pelos objetos Realm (Problema n.º2647)
Foram adicionados dois métodos de extensão no
IDictionary
para obter uma coleçãoIQueryable
envolvendo os valores do dicionário:dictionary.AsRealmQueryable()
permite que você obtenha umIQueryable<T>
deIDictionary<string, T>
que pode ser tratado como uma coleção consultável regular e filtrada/ordenada com LINQ ouFilter(string)
.dictionary.Filter(query, arguments)
filtrará a lista e retornará uma coleção filtrada dos valores do dicionário. É aproximadamente equivalente adictionary.AsRealmQueryable().Filter(query, arguments)
.
A coleção consultável resultante se comportará de forma idêntica aos resultados obtidos chamando
realm.All<T>()
, ou seja, ela emitirá notificações quando alterar e se atualizar automaticamente. (Emissão #2647)Melhore o desempenho do reinício do cliente com recuperação automática e conversão de tabelas de nível superior em tabelas incorporadas. (Atualização de núcleo)
A Flexible Sync agora aguardará que o servidor tenha enviado todo o histórico pendente após uma inicialização antes de marcar uma assinatura como Concluída. (Atualização de núcleo)
Melhora ligeiramente o desempenho do
Realm.RemoveAll()
que remove todos os objetos de um banco de dados Realm aberto. (Emissão #2233)Melhorar as mensagens de erro quando não estiver definindo um BaseFilePath para configuração de domínio ou aplicativo. (Emissão 2863)
Implementação adicionada do
IList
a todas as coleções Realm para permitir a vinculação de dados UWP ListView. (Emissão #1759)
Corrigido
- Corrigido o problema em que a inicialização dos parâmetros do Realm era executada duas vezes, resultando em comportamento inesperado.
- Impediu que
IEmbeddedObject
s eIAsymmetricObject
s fossem usados comoRealmValue
s quando adicionados a um domínio e exibissem mensagens de erro mais significativas. - Corrija um use-after-free se a última referência externa a um Realm criptografado foi fechada entre o momento em que um erro de reinício do cliente foi recebido e o momento em que o download do novo Realm começou. (Atualização de núcleo)
- Correção de uma falha de asserção durante a redefinição do cliente com recuperação ao recuperar uma operação de lista em um objeto incorporado que tenha uma coluna de link no prefixo do caminho para a lista a partir do objeto de nível superior. (Atualização de núcleo)
- Abrir um arquivo não criptografado com uma chave de criptografia às vezes relatava uma mensagem de erro enganosa que indicava que o problema era algo diferente de uma falha de descriptografia. (Atualização de núcleo)
- Correção de um impasse raro que poderia ocorrer ao fechar um Realm sincronizado imediatamente após a confirmação de uma transação de escrita quando o thread do trabalhador de sincronização também tivesse acabado de processar um conjunto de alterações do servidor. (Atualização de núcleo)
- Corrija uma condição de corrida que pode resultar na exibição de erros de "operação cancelada" para chamadas de resposta abertas assíncronas, em vez do erro de sincronização real que causava falhas. (Atualização de núcleo)
- Os bootstraps não serão aplicados em uma única transação de gravação - eles serão aplicados 1MB de conjuntos de alterações de cada vez, ou conforme configurado pelo SDK. (Atualização de núcleo)
- Corrija problemas de corrupção e criptografia de banco de dados em plataformas Apple. (Atualização de núcleo)
- Adicionados nomes totalmente qualificados para arquivos gerados por origem, para evitar colisões de nomeação. (Emissão #3099
- Corrigido um problema que causaria uma exceção ao usar objetos não gerenciados em vinculações (Problema n.º3094)
- Foi corrigido um problema em que a busca do perfil de um usuário enquanto ele estava desconectado resultaria em uma falha de asserção. (Atualização de núcleo)
- Removido o ".tmp_compaction_space" arquivo restante após a compactação de um Realm no Windows. (Atualização de núcleo)
- Corrigiu uma falha que ocorreria se você fechasse um Realm sincronizado enquanto esperasse
SubscriptionSet.WaitForSynchronizationAsync
. (Emissão #2952) - Evite chamar o setter em propriedades vinculadas à UI caso o novo valor da propriedade seja igual ao atual. Isso evita alguns problemas com o Maui, que parece estar chamando o setter de propriedades vinculadas desnecessariamente quando CollectionView/ListView são mostrados na tela. Isso será problemático se o objeto não pertencer às permissões do usuário atual, pois causará uma gravação compensatória. Em alguns casos limitados, isso pode causar um loop de erro (verificado no iOS) quando a reutilização de células está envolvida. (Emissão #3128)
- Corrige um problema em que o gerador de origem não adiciona o namespace para os tipos usados nos inicializadores de propriedades. (Emissão #3135)
- Corrigido um problema que impediria o Realm de funcionar corretamente em aplicativos Unity que tenham o Recarregamento de Domínio desativado. (Emissão #2898)
- Corrigido um erro ao utilizar o
string.Contains
no .NET 2.1 ou posterior onde a string do Atlas Search não é um literal. (Emissão #3134) - Aviso adicionado
[Obsolete]
para alguns membrosErrorCode
do enumeração que não estão mais em uso. (Emissão #3155
Compatibilidade
- Realm Studio: 12.0.0 ou posterior.
Interno
- Usando o Núcleo 12.13.0.
Realm.RefreshAsync
substituído por uma implementação nativa. (PR #2995)
10.18.0 (2022-11-02)
Melhorias
Introduziu o
Realm.SourceGenerator
, um gerador de origem que pode gerar classes de modelo Realm . Isso faz parte do nosso esforço contínuo para modernização da biblioteca do Realm e permitirá introduzir determinados recursos de nível de idioma mais facilmente no futuro. Para usar a geração de origem, as classes de modelo precisam ser declaradas implementando uma das interfaces de base (IRealmObject
,IEmbeddedObject
ouIAsymmetricObject
) e declaradas parciais. Por exemplo:public partial class Person: IRealmObject { public int Age { get; set; } public string Name { get; set; } public PhoneNumber Phone { get; set; } } public partial class PhoneNumber: IEmbeddedObject { public string Number { get; set; } public string Prefix { get; set; } }
Em seguida, o gerador de origem tratará de adicionar a implementação completa para as interfaces.
Na maioria das vezes, converter as classes de modelo de Realm "clássicas" (classes derivadas de
RealmObject
,EmbeddedObject
ouAsymmetricObject
) para usar a nova geração de origem significa apenas definir a classe como parcial e trocar a classe base para a correspondente implementação da interface. A definição clássica do modelo Realm ainda será suportada, mas será eliminada no futuro.Observe que o gerador de fontes ainda está em versão beta, portanto, informe-nos se tiver algum problema ao usá-lo. Algumas notas adicionais:
OnManaged
eOnPropertyChanged
agora são métodos parciais.- A herança não é suportada, portanto, os modelos Realm não podem derivar de nenhuma outra classe.
- Classes aninhadas não são suportadas.
Corrigido
- Corrigiu uma NullReferenceException que estava sendo lançada ao assinar notificações
PropertyChanged
em uma instânciaSession
que era então coletada como lixo antes do cancelamento da assinatura. (PR #3061) - Foi removido o suporte a bitcode do binário do iOS, pois ele não é mais aceito para envios à App Store. (Emissão #3059)
- Corrigiu o retorno do pai ao acessá-lo em um
IEmbeddedObject
. (Emissão #2742) - Desempenho ligeiramente aumentado e alocações reduzidas ao criar um enumerador para collections congeladas (edição #2815).
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
Interno
- Usando o Núcleo 12.9.0.
- Fluxo de trabalho adicionado para atribuir usuários automaticamente a problemas e PRs. (PR #3069)
- O fluxo de trabalho adicionado para validar o changelog foi atualizado. (PR #3069)
10.17.0 (2022-10-06)
Melhorias
- Priorize a integração de alterações locais em relação às alterações remotas - reduza o tempo que os usuários podem ter que esperar ao confirmar alterações locais. Pare de armazenar conjuntos de alterações baixados no histórico. (Atualização de núcleo)
- Melhore muito o desempenho de classificação ou distinção das chaves ou valores de um dicionário. A operação mais cara agora é executada O(log N) em vez de O(N log N) vezes, e Dicionários grandes podem ver mais de 99% de redução no tempo de classificação. (Atualização de núcleo)
- Lide com a migração sem problemas de um modelo de sistema de aplicação do App Services. (Atualização de núcleo)
Corrigido
- Corrija um use-after-free quando uma sessão de sincronização for fechada e o aplicativo for destruído ao mesmo tempo. (Atualização de núcleo)
- Corrigiu um
NullReferenceException
que ocorria no finalizador doRealmObjectBase
sempre que uma exceção era lançada antes que o objeto fosse inicializado. (Emissão #3045)
Compatibilidade
- Realm Studio: 12.0.0 ou posterior.
Interno
- Usando o Núcleo 12.9.0
10.16.0 (2022-10-03)
Melhorias
Introduziu
AsymmetricObject
destinado a volumes de trabalho de escrita pesada, onde o alto desempenho geralmente é importante. Este novo objeto:- sincroniza dados unidirecionalmente, dos clientes para o servidor
- não pode ser consultado, excluído ou modificado depois de adicionado ao Realm
- só pode ser usado com Flexible Sync
- não pode ser o lado receptor de qualquer tipo de relacionamento
- pode conter
EmbeddedObject
s, mas não pode vincular aRealmObject
ouAsymmetricObject
.
Na mesma transação de gravação, é legal adicionar
AsymmetricObject
seRealmObject
sclass Measurement : AsymmetricObject { [PrimaryKey, MapTo("_id")] public Guid Id { get; private set; } = Guid.NewGuid(); public double Value { get; set; } public DataTimeOffset Timestamp { get; private set; } = DateTimeOffset.UtcNow; } class Person : RealmObject { //............ } //..... var measurement = new Measurement { Value = 9.876 }; realm.Write(() => { realm.Add(measurement); realm.Add(new Person()); }); _ = asymmetricObject.Value; // runtime error _ = realm.All<Measurement>(); // compile time error
Foram adicionados dois manipuladores de redefinição de cliente,
RecoverUnsyncedChangesHandler
eRecoverOrDiscardUnsyncedChangesHandler
, que tentam mesclar automaticamente as alterações locais não sincronizadas com as remotas no caso de uma redefinição de cliente. Especificamente comRecoverOrDiscardUnsyncedChangesHandler
, você pode voltar à estratégia local de descarte caso a mesclagem automática não possa ser realizada de acordo com as regras do seu servidor. Essas duas novas estratégias simplificam ainda mais o tratamento de eventos de redefinição do cliente quando comparadas aDiscardUnsyncedChangesHandler
.RecoverOrDiscardUnsyncedChangesHandler
que será o padrão de agora em diante. Um exemplo é o seguinteForam adicionados dois manipuladores de reinício do cliente ,
RecoverUnsyncedChangesHandler
eRecoverOrDiscardUnsyncedChangesHandler
, que tentam mesclar automaticamente as alterações locais não sincronizadas com as remotas no evento de uma reinício do cliente. Especificamente comRecoverOrDiscardUnsyncedChangesHandler
, você pode voltar para a estratégia de descarte não sincronizado caso a mesclagem automática não possa ser realizada de acordo com as regras do servidor. Essas duas novas estratégias simplificam ainda mais o tratamento de eventos de reinício do cliente quando comparadas aDiscardUnsyncedChangesHandler
.RecoverOrDiscardUnsyncedChangesHandler
que será o padrão de agora em diante. Mais informações sobre as estratégias mencionadas acima podem ser encontradas em nossa página deDocs . Um exemplo de uso de um dos novos manipuladores é o seguinte:var conf = new PartitionSyncConfiguration(partition, user) { ClientResetHandler = new RecoverOrDiscardUnsyncedChangesHandler { // As always, the following callbacks are optional OnBeforeReset = (beforeFrozen) => { // executed right before a client reset is about to happen }, OnAfterRecovery = (beforeFrozen, after) => { // executed right after an automatic recovery from a client reset has completed }, OnAfterDiscard = (beforeFrozen, after) => { // executed after an automatic recovery from a client reset has failed but the DiscardUnsyncedChanges fallback has completed }, ManualResetFallback = (session, err) => { // handle the reset manually } } };
(PR #2745)
Apresentando suporte de query de string para expressões de lista constantes como
realm.All<Car>().Filter("Color IN {'blue', 'orange'}")
. Isso também inclui suporte a queries gerais para correspondência de lista versus lista, comorealm.All<Car>().Filter("NONE Features IN {'ABS', 'Seat Heating'}")
. (Atualização de núcleo)Melhore o desempenho quando um novo Arquivo de Realm se conectar ao servidor pela primeira vez, especialmente quando quantidades significativas de dados foram escritas enquanto estiver offline. (Atualização de núcleo)
Transferir mais do trabalho feito no thread do trabalhador de sincronização para fora da transação de gravação usada para aplicar alterações no servidor, reduzindo o tempo que ele bloqueia a escrita de outros threads. (Atualização de núcleo)
Melhore o desempenho do analisador de conjuntos de alterações de sincronização, que acelera a aplicação de conjuntos de alterações do servidor. (Atualização de núcleo)
Corrigido
- Foi adicionada uma mensagem de erro mais significativa sempre que um projeto não tem
[TargetFramework]
definido. (Emissão #2843) - Abrir um Realm somente leitura pela primeira vez com um
SyncConfiguration
não definiu a versão do esquema, o que pode levar a falhas de asserçãom_schema_version != ObjectStore::NotVersioned
. (Atualização de núcleo) - Carregar chamadas de resposta de conclusão (ou seja,
Session.WaitForUploadAsync
) podem ter chamado antes que a mensagem de download que os concluiu fosse totalmente integrada. (Atualização de núcleo) - Corrigiu uma exceção "fcntl() com F_BARRIERFSYNC falhou: ioctl inadequado para dispositivo" ao executar com MacOS em uma unidade exFAT. (Atualização de núcleo)
- A sincronização de um128 decimal com significando grande pode resultar em uma falha. (Atualização de núcleo)
Realm.Refresh()
na verdade, não avançaram para a versão mais recente em alguns casos. Se houver uma versão mais recente do que a versão atual que não exija bloqueio, ela avançará para essa versão, ao contrário do comportamento documentado. (Atualização de núcleo)- Vários problemas relacionados a notificações foram corrigidos. (Atualização de núcleo)
- Corrigir uma corrida de dados no RealmCoordinator::m_sync_session que pode ocorrer se vários threads realizarem a abertura inicial de um Realm de uma só vez.
- Se uma SyncSession sobrevivesse ao Realm principal e fosse adotada por um novo Realm para o mesmo arquivo, outros processos não seriam notificados sobre escritas de sincronização nesse arquivo.
- Corrija uma causa de avisos de inversão de QoS ao executar gravações no thread principal em plataformas Apple. A espera de que as notificações assíncronas estejam prontas agora é feita com reconhecimento de QoS.
- Se você definir uma assinatura em um link na Flexible Sync, o servidor não saberá como lidar com isso (#5409, desde v11.6.1)
- Se uma query sem distinção entre maiúsculas e minúsculas procurar uma string que inclua um caractere 4-byte UTF8 , o programa falhará. (Atualização de núcleo)
- Validação adicionada para evitar a adição de um objeto removido usando Realm.Add. (Emissão #3020)
Compatibilidade
- Realm Studio: 12.0.0 ou posterior.
Interno
- Usando o Núcleo 12.7.0.
10.15.1 (2022-08-08)
Corrigido
- Correção de um problema introduzido no 10.15.0 que impediria a autenticação de usuário não anônimo no Atlas App Services. (Emissão #2987)
- Substituição adicionada a
User.ToString()
que gera o ID do usuário e o provedor. (PR #2988) - Foram adicionadas sobrecargas de operador == e != a
User
, que corresponde ao comportamento deUser.Equals
. (PR #2988)
Compatibilidade
- Realm Studio: 12.0.0 ou posterior.
Interno
- Usando o Núcleo 12.4.0.
10.15.0 (2022-08-05)
Melhorias
- Pré-visualização do suporte para .NET 6 com Mac Catalyst e Maui. (PR #2959)
- Reduzir o uso de mapeamentos de memória e espaço de endereço virtual (atualização do Core)
Corrigido
- Corrija uma corrida de dados ao abrir um Realm de sincronização flexível (atualização do núcleo).
- Corrigiu uma remoção de backlink ausente ao definir um
RealmValue
deRealmObject
para nulo ou qualquer outro valor que não fosse RealmObject. Os usuários podem ter visto exceção de "chave não encontrada" ou falhas de afirmação, comomixed.hpp:165: [realm-core-12.1.0] Assertion failed: m_type
, ao remover o objeto de destino. (Atualização de núcleo) - Corrigido um problema no Windows que causava alto uso da CPU pelo cliente de sincronização quando não havia sessões de sincronização ativas. (Atualização de núcleo)
- Melhor desempenho dos clientes de sincronização durante a integração de conjuntos de alterações com muitas strings pequenas (totalizando mais de 1024 bytes por conjunto de alterações) no iOS 14 e dispositivos que tenham memória restritiva ou fragmentada. (Atualização de núcleo)
- Corrige a exceção ao decodificar cadeias de caracteres internas na ferramenta realm-apply-to-state. (Atualização de núcleo)
- Corrigir uma corrida de dados ao confirmar uma transação enquanto vários threads aguardam o bloqueio de gravação em plataformas usando variáveis de condição entre processos emuladas (a maioria das plataformas, exceto Linux não Android). (Atualização de núcleo)
- Corrigir alguns casos de falta de espaço de endereço virtual (vistos/relatados como falhas no mmap) (atualização do Core)
- Os valores decimais128 com mais de 110 bits significativos não foram sincronizados corretamente com o servidor (atualização de núcleo)
Compatibilidade
- Realm Studio: 12.0.0 ou posterior.
Interno
- Usando o Núcleo 12.4.0.
10.14.0 (2022-06-02)
Melhorias
- Foi adicionada uma substituição mais eficiente para
Realm.WriteAsync
. A API anterior iniciaria um thread em segundo plano, abriria o Realm lá e executaria uma transação de gravação síncrona no thread em segundo plano. A nova API adquirirá de forma assíncrona o bloqueio de gravação (início da transação) e confirmará a transação de forma assíncrona, mas o bloco de escrita real será executado na thread original. Isso significa que objetos/queries capturados antes do bloco podem ser usados dentro do bloco sem depender de referências threadsafe. É importante ressaltar que você pode misturar e combinar chamadas assíncronas e sincronizadas. E ao chamar qualquerRealm.WriteAsync
em um thread em background, a chamada é executada apenas de forma síncrona, então você deve usarRealm.Write
por uma questão de legibilidade. A nova API é composta deRealm.WriteAsync<T>(Func<T> function, CancellationToken cancellationToken)
,Realm.WriteAsync(Action action, CancellationToken cancellationToken)
,Realm.BeginWriteAsync(CancellationToken cancellationToken)
eTransaction.CommitAsync(CancellationToken cancellationToken)
. Enquanto oTransaction.Rollback()
não precisa de uma contraparte assíncrona. As chamadas de API obsoletas sãoRealm.WriteAsync(Action<Realm> action)
,Real.WriteAsync<T>(Func<Realm, IQueryable<T>> function)
,Realm.WriteAsync<T>(Func<Realm, IList<T>> function)
eRealm.WriteAsync<T>(Func<Realm, T> function)
. Aqui está um exemplo de uso:
(PR #2899)using Realms; var person = await _realm.WriteAsync(() => { return _realm.Add( new Person { FirstName = "Marco" }); }); // you can use/modify person now // without the need of using ThreadSafeReference
- Foi adicionado o método
App.DeleteUserFromServerAsync
para excluir um usuário do servidor. Ele também invalidará o usuário localmente, bem como removerá todos os seus dados locais. Isso não removerá nenhum dado que o usuário tenha carregado do servidor. (Emissão #2675) - Adição da propriedade booleana
ChangeSet.IsCleared
que é verdadeira quando a coleção é limpa. As coleções de Realm também agora elevam o eventoCollectionChanged
com açãoReset
em vez deRemove
quando as coleções são limpas. Observe que isso funcionará apenas com propriedades de coleção, comoIList
eISet
. (Emissão #2856) - Adicionado
PopulateInitialSubscriptions
aFlexibleSyncConfiguration
- esta é uma chamada de resposta que será invocada na primeira vez que um Realm for aberto. Permite criar as assinaturas iniciais que serão adicionadas ao Realm antes de ser aberto. (Emissão #2913) - Aumente a versão do SharedInfo para 12. Isso requer a atualização de qualquer aplicativo que acesse o arquivo em um cenário de multiprocessos, incluindo o Realm Studio.
- O cliente de sincronização lidará normalmente com mensagens de erro de gravação compensatória do servidor e passará informações detalhadas para o manipulador de erros de sincronização do SDK sobre quais objetos causaram a ocorrência da gravação compensatória. (#5528)
Corrigido
- Adicionar um objeto a um conjunto, excluir o objeto pai e, em seguida, excluir o objeto mencionado anteriormente causa falha (#5387)
- A Flexible Sync não retomaria corretamente a sincronização se um bootstrap fosse interrompido (#5466)
- A sincronização flexível agora garantirá que uma inicialização do servidor só seja aplicada se toda a inicialização for recebida - garantindo que não haja objetos órfãos como resultado da alteração do snapshot de leitura no servidor (#5331)
- Corrigir parcialmente uma regressão de desempenho no desempenho de gravação em plataformas Apple. Confirmar uma transação de gravação vazia é ~10x mais rápido que 10.13.0, mas ainda mais lento do que pré-10.7.1 devido ao uso de sincronização de arquivos mais segura contra falhas (desde v10.7.1). ( Edição do Swift #7740).
Compatibilidade
- Realm Studio: 12.0.0 ou posterior.
Interno
- Usando o Núcleo 12.1.0.
10.13.0 (2022-05-18)
Melhorias
- Foi adicionada a funcionalidade para converter realms de sincronização em realms locais e realms locais em realms de sincronização. (Emissão #2746)
- Foi adicionado suporte para uma nova estratégia de redefinição do cliente, chamada Descartar alterações não sincronizadas. Essa nova estratégia simplifica muito o tratamento de um evento de redefinição de cliente em um Realm sincronizado.
Esta adição torna
Session.Error
obsoleto. Para continuar temporariamente usando oSession.Error
atual, o seguinte deve ser feito:
Para aproveitar o novo recurso Descartar alterações não sincronizadas , o seguinte deve ser feito (todas as chamadas de resposta são opcionais):var conf = new PartitionSyncConfiguration(partition, user) { ClientResetHandler = new ManualRecoveryHandler(); };
Se, em vez disso, você quiser continuar usando a solução manual mesmo após o fim do período de descontinuação, faça o seguintevar conf = new PartitionSyncConfiguration(partition, user) { ClientResetHandler = new DiscardLocalResetHandler { OnBeforeReset = (beforeFrozen) => { // executed right before a client reset is about to happen }, OnAfterReset = (beforeFrozen, after) => { // executed right after a client reset is has completed }, ManualResetFallback = (session, err) => { // handle the reset manually } } };
var conf = new PartitionSyncConfiguration(partition, user) { ClientResetHandler = new ManualRecoveryHandler((sender, e) => { // user's code for manual recovery });
Corrigido
- Corrigiu um
System.DllNotFoundException
lançado pelas APIs do Realm na inicialização no Xamarin.iOS (problema #2926, desde 10.12.0)
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
Interno
- Usando o Núcleo 11.14.0.
10.12.0 (2022-05-05)
Melhorias
- Pré-visualize o suporte para .NET 6 com iOS, Android e Maui. Adicionamos suporte provisório para as novas cargas de trabalho do .NET 6 Mobile (exceto MacCatalyst, que será ativado mais tarde). A ferramenta .NET em si ainda está em pré-visualização, portanto não temos uma boa cobertura de teste das novas plataformas ainda. Relate qualquer problema que encontrar em Realm.
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
Interno
- Usando o Núcleo 11.14.0.
10.11.2 (2022-04-12)
Corrigido
- Corrigiu bugs de corrupção quando a criptografia é usada. (Edição principal n. °5360)
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
Interno
- Usando o Núcleo 11.14.0.
10.11.1 (2022-03-31)
Corrigido
- Corrigido um problema que faria com que o HttpClientHandler gerenciado fosse usado em aplicativos Xamarin, mesmo que o projeto esteja configurado para usar o nativo. (Emissão #2892)
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
Interno
- Usando o Núcleo 11.12.0.
10.11.0 (2022-03-28)
Melhorias
- Adição da propriedade
Session.ConnectionState
para obter oSession
deSessionConnectionState
. Além disso,Session
agora implementaINotifyPropertyChanged
para que você possa ouvir as alterações emSession.ConnectionState
. (Emissão #2801) - O Realm agora suporta a execução no Windows ARM64 para .NET Framework, .NET Core e aplicativos UWP. (Emissões #2704 e #2817)
- Foi adicionada uma propriedade
AppConfiguration.HttpClientHandler
que permite substituir o manipulador de cliente HTTP padrão usado pelo Realm .NET SDK para fazer chamadas HTTP . Observe que isso afeta apenas o comportamento das chamadas HTTP , como login do usuário, chamadas de função e chamadas remotas do MongoDB . O cliente de sincronização usa uma implementação nativa de websocket e não usará o manipulador de mensagens fornecido. (Emissão #2865)
Corrigido
- [Unidade] Corrigido um problema que fazia com que o tecelão falhasse quando invocado pelo menu do editor
Tools->Realm->Weave Assemblies
com o erroUnityEngine.UnityException: get_dataPath can only be called from the main thread
. (Emissão #2836) - Foi corrigido um problema que fazia com que
RealmInvalidObjectException
fosse causado ao enumerar uma coleção de Realm inválida (por exemplo, uma lista pertencente a um objeto excluído). (Emissão #2840) - O analisador de query não aceitava "in" como nome de propriedade (Problema Principal #5312)
- Às vezes, o aplicativo falhava com exceções como 'KeyNotFound' ou afirmação "has_refs ()". Outros problemas que indicam corrupção de arquivos também podem ser corrigidos por isso. O mencionado aqui é aquele que leva à resolução do problema. (Edição principal n. °5283)
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
Interno
- Usando o Núcleo 11.12.0.
- Habilitou a execução de Benchmarks em dispositivos iOS ativando o intérprete para alguns conjuntos do Windows.
10.10.0 (2022-02-28)
Problema de representação do GUID
Esta versão corrige um bug principal na forma como os valores de Guia são armazenados no banco de banco de dados. Ele fornece uma migração automática para bancos de dados locais (não sincronizados), mas é necessário cuidado extra ao atualizar um aplicativo que usa a sincronização.
Contexto
Um Guia é representado por componentes 4 - int
, short
, short
e um byte[8]
. Os Guias da Microsoft divergem da especificação UUID, pois codificam os três primeiros componentes com a endianidade do sistema (little-endian para todas as CPUs modernas), enquanto os UUIDs codificam seus componentes como big-endian. O resultado final é que os mesmos bytes têm representações de string diferentes quando interpretados como Guid
pelo .NET SDK e quando interpretados como UUID
pelo Realm Database - por exemplo f2952191-a847-41c3-8362-497f92cb7d24
vs 912195f2-47a8-c341-8362-497f92cb7d24
(observe a troca de bytes nos três primeiros componentes). Você pode ver o problema abrindo um banco de dados de dados criado pelo .NET SDK no Realm Studio e inspecionando os valores das propriedades Guia.
Corrigir
A correção que estamos fornecendo é ajustar o comportamento do .NET SDK para ler/gravar guias no banco de dados com representação de big-endian. Isso significa que o SDK e o banco de dados exibirão consistentemente os mesmos valores. Isso tem algumas implicações que são descritas nas seções Realms locais e sincronizados.
Realms locais
Para Realms locais, estamos executando uma migração única na primeira vez que o Realm é aberto com o novo SDK. Durante essa migração, atualizaremos todos os campos do Guia para o formato big-endian. Isso significa que a representação de string permanecerá a mesma, mas o valor no banco de dados mudará para corresponder a ela. Isso significa que o processo de atualização deve ser contínuo, mas se você decidir fazer o downgrade para uma versão mais antiga do SDK, verá a ordem de bytes ser invertida. A migração não será executada várias vezes, mesmo se você fizer o downgrade.
Domínios sincronizados
Não há migração de cliente fornecida para Realms sincronizados. Isso ocorre porque a natureza distribuída do sistema significaria que necessariamente haverá um período de estado inconsistente. Em vez disso, os valores das propriedades Guid
são lidos como já estão armazenados no banco de dados, o que significa que a representação da string será invertida em comparação com as versões anteriores do SDK, mas agora corresponderá à representação em Atlas/Compass/Realm Studio . Há três grupos gerais em que sua aplicação se enquadrará:
- Se você não se importa com os valores de string das propriedades Guia no cliente, você não precisa fazer nada. Os valores ainda serão Guias únicos e válidos.
- Se você usar os valores de guia de string do aplicativo cliente - por exemplo, para correlacionar IDs de usuário com um CMS, mas tiver controle total sobre seus dispositivos cliente - por exemplo, como este é um aplicativo interno da empresa, é recomendável executar uma migração única dos dados no Atlas e forçar todos os usuários a atualizar para a versão mais recente do aplicativo.
- Se não for possível forçar todos os usuários a atualizar ao mesmo tempo, você pode fazer uma migração ao vivo adicionando uma propriedade extra para cada propriedade Guia que você tenha e escrever uma função de trigger que migrará os dados entre os dois. A versão antiga do aplicativo gravará na propriedade original , enquanto a nova versão gravará na nova propriedade e o trigger converterá entre os dois.
Se você estiver usando a sincronização e precisar atualizar para a versão mais recente do SDK, mas ainda não estiver pronto para migrar seus dados, consulte a seção Opting out
.
Desativação
Se, por algum motivo, você quiser desativar o comportamento corrigido, poderá desativá-lo temporariamente definindo a propriedade Realm.UseLegacyGuidRepresentation
como true
. Isso não é recomendado, mas pode ser usado quando você precisar de mais tempo para testar a migração e, ao mesmo tempo, obter correções de bugs e outras melhorias. Configurá-la como true
faz duas coisas:
- Ele traz de volta o pré-10.10.0 comportamento de leitura/escrita Valores de Guia com representação little-endian.
- Ele desabilita o código de migração para Realms locais. Observe que ele não reverterá a migração se você já tiver aberto o Arquivo de Realm quando
UseLegacyGuidRepresentation
foi definido comofalse
.
Melhorias
- Foi eliminada uma limitação que o impediria de alterar a chave primária dos objetos durante uma migração. Agora é possível fazer isso com a API dinâmica e a API fortemente digitada:
var config = new RealmConfiguration { SchemaVersion = 5, MigrationCallback = (migration, oldVersion) => { // Increment the primary key value of all Foos foreach (var obj in migration.NewRealm.All<Foo>()) { obj.Id = obj.Id + 1000; } } }
- [Unity] O item de menu Realm no Editor do Unity foi movido para
Tools/Realm
para reduzir a aglomeração e se alinhar com outros 3plug-ins de editores de terceiros. (Emissão #2807)
Corrigido
- Foi corrigido um problema com os testes xUnit que fazia com que
System.Runtime.InteropServices.SEHException
fosse lançado sempre que o Realm fosse acessado em um teste não assíncrono. (Emissão #1865) - Corrigido um bug que levaria à alocação de metadados desnecessário ao congelar um domínio. (Emissão #2789)
- Foi corrigido um problema que faria com que objetos gerenciados pelo Realm (por exemplo
RealmObject
, lista, resultados e assim por diante) alocados durante um bloco de migração para manter o Realm aberto até que eles sejam coletados. Isso tinha implicações sutis, como não conseguir excluir o Realm logo após uma migração ou não conseguir abrir o Realm com uma configuração diferente. (PR #2795) - Correção de um problema que impedia o compilador Unity3D'S IL2C++ de processar corretamente uma das dependências do Realm. (Emissão #2666)
- Corrigiu o caminho de tempo de execução osx no pacote Realm NuGet para também se aplicar a arquiteturas Apple Silicon (universal) (Problema #2732)
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
Interno
- Usando o Núcleo 11.10.0
10.9.0 (2022-01-21)
Melhorias
Suporte adicionado para um novo modo de sincronização com o MongoDB Realm, chamado "Flexible Sync". Ao usar o Flexible Sync, o cliente decide em quais queries está interessado e solicita ao servidor todos os objetos correspondentes a essas queries. Os objetos correspondentes serão armazenados em um Realm local , assim como antes, e poderão ser consultados e acessados enquanto estiver offline. Esse recurso está em versão beta, portanto, o feedback - positivo e negativo - é muito bem-vindo e, como de costume, não recomendamos usá-lo para volumes de trabalho de produção ainda.
- Foi adicionado um novo tipo de configuração, chamado
FlexibleSyncConfiguration
. Use este tipo para obter uma instânciaRealm
que usa o novo modo de sincronização com o servidor. - Preteriu a classe
SyncConfiguration
em favor dePartitionSyncConfiguration
. As duas classes são equivalentes e o novo tipo é introduzido para melhor contraste comFlexibleSyncConfiguration
. Os dois tipos são equivalentes e permitem que você abra uma instânciaRealm
que está usando o antigo modo "Partition Sync". - Foi adicionado um novo tipo, chamado
SubscriptionSet
. É uma collection que contém as várias assinaturas de query ativas que foram criadas para este Realm. Essa coleção pode ser acessada por meio da propriedadeRealm.Subscriptions
. Ele seránull
para Realms de sincronização local e de partição e não nulo para Realms de Flexible Sync.
Um exemplo mínimo seria assim:
var config = new FlexibleSyncConfiguration(user); var realm = Realm.GetInstance(config); // Add a new subscription realm.Subscriptions.Update(() => { var year2022 = new DateTimeOffset(2022, 1, 1); var saleOrders = realm.All<SaleOrder>().Where(o => o.Created > year2022); realm.Subscriptions.Add(saleOrders); }); // Wait for the server to acknowledge the subscription and return all objects // matching the query await realm.Subscriptions.WaitForSynchronizationAsync(); // Now we have all orders that existed on the server at the time of // subscribing. From now on, the server will send us updates as new // orders get created. var orderCount = realm.All<SaleOrder>().Count();
- Várias assinaturas podem ser criadas para queries na mesma classe e, nesse caso, elas serão combinadas com um
OR
lógico. Por exemplo, se você criar uma assinatura para todos os pedidos criados no 2022 e outra para todos os pedidos criados pelo usuário atual, seu Realm local conterá a união dos dois conjuntos de resultados. - As assinaturas podem ser nomeadas (o que facilita o cancelamento da assinatura) ou sem nome. Adicionar várias assinaturas sem nome com a mesma query não é possível.
- Modificar o conjunto de assinaturas ativas é uma operação cara do lado do servidor, mesmo que o diff resultante não seja grande. É por isso que recomendamos o máximo possível de atualizações de assinatura em lote para evitar a sobrecarga da instância do servidor. Uma boa prática é declarar as assinaturas do usuário antecipadamente - geralmente na primeira vez que o Realm é aberto, e atualizá-las somente quando for absolutamente necessário.
- Encontre mais informações sobre a API e as limitações atuais nos Docs.
- Foi adicionado um novo tipo de configuração, chamado
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
Interno
- Usando o Núcleo 11.8.0.
- Os testes de versão são executados no realm-qa em vez do realm-dev. (PR #2771)
10.8.0 (2022-01-17)
Melhorias
- Adicionada a propriedade
RealmConfigurationBase.FallbackPipePath
. Na maioria dos casos, essa propriedade pode ser deixada nula, mas deve ser usada quando um realm é aberto em um sistema de arquivos onde os pipes nomeados não podem ser criados, como o armazenamento externo no Android que usa FAT32. Nesse caso, o caminho precisa apontar para um local em outro sistema de arquivos onde os pipes nomeados podem ser criados. (PR #2766) - Foram adicionadas operações aritméticas de suporte (+, -, *, /) na sintaxe de consulta baseada em cadeia de caracteres (
realm.All<Foo>().Filter("some-query")
). Os operandos podem ser propriedades e/ou constantes de tipos numéricos (inteiro, flutuante, double ou decimal128). Agora você pode escrever uma query como"(age + 5) * 2 > child.age"
. (Atualização de núcleo)
Corrigido
- Corrigida uma condição de corrida que poderia resultar no erro
Sharing violation on path ...
ao abrir um projeto Unity no macOS. (Problema #2720, correção por @tomkrkoian) - Correção de um erro que era gerado quando
Realm.GetInstance
era chamado várias vezes em um Realm somente leitura . (Emissão #2731) - Corrigido um bug que resultaria na cláusula
LIMIT
sendo ignorada quandoCount()
é invocado em umIQueryable
- por exemplo expressões comorealm.All<Foo>().Filter("Bar > 5 LIMIT(1)).Count()
ignorariam o limite no predicado baseado em string e retornariam a contagem de todas as correspondências. (Emissão #2755) - Corrigiu a lógica no
RealmResultsVisitor.TraverseSort
para permitir a classificação nas propriedades da interface. (Emissão #1373, contribuição de @daWAan)
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
Interno
- Usando o Núcleo 11.8.0.
- Atualização do nome dos pacotes de pré-lançamento para usar "pr" em letras minúsculas - por exemplo
10.7.1-pr-2695.1703
em vez de10.7.1-PR-2695.1703
. (PR #2765) - Migrado do uso da CLI para importar/exportar aplicativos para configurá-los por meio da API de administração. (PR #2768)
10.7.1 (2021-11-19)
Corrigido
- O Realm de um usuário de sincronização não era excluído quando o usuário era removido se o caminho do Realm fosse muito longo de modo que acionasse o nome hasheado de fallback (isso depende do sistema operacional, mas é 300 caracteres no Linux). (Atualização de núcleo)
- Não continue tentando atualizar o token de acesso se o relógio do cliente estiver mais de 30 minutos adiantado. (Atualização de núcleo)
- Não durma o thread de sincronização artificialmente se uma solicitação de autenticação falhar. Isso pode ser observado como uma trava da interface do usuário nos aplicativos quando a sincronização tenta se conectar depois de ficar offline por mais de 30 minutos. (Atualização de núcleo)
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
Interno
- Usando o Núcleo 11.6.1.
10.7.0 (2021-11-09)
Melhorias
- Foi adicionada a propriedade
Realm.SyncSession
que retornará a sessão de sincronização para este Realm se o Realm for sincronizado ounull
para realms locais. Isso está substituindo o método de extensãoGetSession(this Realm)
, que agora está obsoleto. (PR #2711)
Corrigido
- Corrigido um bug que resultaria na geração de um
RealmException
ao abrir um Realm somente leitura com esquema que é um superconjunto do esquema no disco. Agora, o código apenas funcionará e tratará todas as classes não presentes no esquema em disco para serem tratadas como coleções vazias - por exemplorealm.All<ThisIsNotInOnDiskSchema>().Count == 0
. (Emissão #2619) - Corrigido um bug que criaria uma pasta "Documentos" na pasta de aplicativos binários quando a proteção contra rubor no Windows estivesse ativada. (Emissão #2685)
- Corrigido um problema que causaria a geração de implementação incorreta de propriedade se
PropertyChanged.Fody
fosse executado após o criador de Realm . (Emissão #1873) - [Unidade] Construtores adicionais preservados necessários para serializar e desserializar Dados de Usuário Personalizados. (PR #2519)
- Foi corrigido um problema que resultaria em
InvalidOperationException
ao criar simultaneamente umRealmConfiguration
com uma propriedadeSchema
definida explicitamente. (Emissão #2701) - [Unity] Foi corrigido um problema que resultaria em
NullReferenceException
ao criar para iOS quando o pacote Realm não fosse instalado por meio do Unity Package Manager. (Emissão #2698) - Corrigido um bug que poderia fazer com que propriedades de objetos congelados retornassem valor/lançamento de uma exceção incorretos se o esquema do Realm fornecido não correspondesse ao esquema no disco. (Emissão #2670)
- Corrigiu uma falha de afirmação rara ou um impasse quando uma sessão de sincronização estava correndo para fechar ao mesmo tempo em que a referência externa ao Realm estava sendo liberada. (Atualização de núcleo)
- Correção de uma falha de asserção ao abrir um Realm de sincronização com um usuário que havia sido removido. Em vez disso, uma exceção será lançada. (Atualização de núcleo)
- Corrigido um segfault raro que poderia ser trigger se um usuário estivesse sendo desconectado enquanto a resposta de atualização do token de acesso chega. (Atualização de núcleo)
- Corrigido um bug em que os notificadores de progresso continuam a ser chamados após a conclusão do download de um domínio sincronizado. (Atualização de núcleo)
- Permitir que EPERM seja retornado de fallocate(). Isso melhora o suporte para execução em ambientes Linux com sistemas de arquivos interessantes, como Amazon Web Services Lambda. Graças a @ztane por relatar e sugerir uma correção. (Atualização de núcleo)
- Corrigiu um usuário sendo deixado no estado conectado quando o token de atualização do usuário expira. (Atualização de núcleo)
- O SyncManager tinha alguns bloqueios inconsistentes que poderiam resultar em corridas de dados e/ou impasses, principalmente de maneiras que nunca seriam atingidas fora de testes que fazem coisas muito estranhas. (Atualização de núcleo)
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
Interno
- Usando o Núcleo 11.6.0.
- Os wrappers iOS agora são construídos com o "novo sistema de construção" introduzido pelo Xcode 10 e usado como padrão pelo Xcode 12. Mais informações podem ser encontradas nos Docs do cmake.
- Agora atualizamos a instância do Realm resultante ao abrir um Realm sincronizado com
GetInstanceAsync
. (Emissão #2256) - Adicionados testes de sincronização para todas as plataformas que são executadas no cloud-dev. (Emissão #2049)
- Foram adicionados testes Android em execução no emulador. (Emissão #2680)
- Começa a publicar pacotes de pré-lançamento no S3 usando o Sposet ( URLdo feed). (Emissão #2708)
- Habilitar LTO para todas as compilações. (PR #2714)
10.6.0 (2021-09-30)
Melhorias
Foram adicionados dois métodos de extensão em
ISet
para obter uma coleçãoIQueryable
envolvendo o conjunto:set.AsRealmQueryable()
permite que você obtenha umIQueryable<T>
deISet<T>
que pode ser tratado como uma coleção consultável regular e filtrada/ordenada com LINQ ouFilter(string)
.set.Filter(query, arguments)
filtrará o conjunto e retornará a coleção filtrada. É aproximadamente equivalente aset.AsRealmQueryable().Filter(query, arguments)
.
A coleção consultável resultante se comportará de forma idêntica aos resultados obtidos chamando
realm.All<T>()
, ou seja, ela emitirá notificações quando alterar e se atualizar automaticamente. (Emissão #2555)Adicionados dois novos métodos em
Migration
(edição #2543):RemoveType(typeName)
permite remover completamente um tipo e seu esquema de um Realm durante uma migração.RenameProperty(typeName, oldPropertyName, newPropertyName)
permite renomear uma propriedade durante uma migração.
Um Realm Schema agora pode ser construído em tempo de execução em vez de gerado automaticamente a partir das classes de modelo. A geração automática continua funcionando e deve cobrir as necessidades da grande maioria dos usuários do Realm . A construção manual do esquema pode ser necessária quando a forma dos objetos depende de algumas informações conhecidas apenas no tempo de execução ou em casos muito raros em que elas podem fornecer benefícios de desempenho representando uma coleção de tamanho conhecido como propriedades na classe. (Emissão #824)
RealmConfiguration.ObjectClasses
agora foi preterido em favor deRealmConfiguration.Schema
.RealmSchema
tem um operador de conversão implícita deType[]
, portanto, o código que antes era parecido comObjectClasses = new[] { typeof(Foo), typeof(Bar) }
pode ser atualizado trivialmente paraSchema = new[] { typeof(Foo), typeof(Bar) }
.Property
foi convertido em uma estrutura somente leitura removendo os setters de suas propriedades. Eles não fizeram nada anteriormente, então não achamos que alguém os estivesse usando.- Foram adicionados vários métodos de fábrica no
Property
para simplificar a declaração de propriedades do Realm , sendo explícito sobre o intervalo de opções válidas - por exemploProperty.FromType<int>("IntProperty")
ouProperty.Object("MyPersonProp", "Person")
. O construtor deProperty
agora é público para suportar cenários avançados, mas recomendamos usar os métodos de fábrica. ObjectSchema.Builder
tornou-se público e simplificou sua API. Ele permite que você construa uma representação mutável do esquema de um único objeto e adicione/remova propriedades a ele. Você pode obter um construtor vazio ou pode visualizá-lo com as informações de uma classe de modelo existente (ou seja, herdando deRealmObject
ouEmbeddedObject
).RealmSchema.Builder
tornou-se público e simplificou sua API. Ele permite que você construa uma representação mutável do esquema de um Realm inteiro e adicione/remova esquemas de objetos a ele.- Um exemplo simples de como usar a nova API seria:
public class Person : RealmObject { public string Name { get; set; } public Address Address { get; set; } } // Declare schema from existing model classes var config = new RealmConfiguration { Schema = new[] { typeof(Person), typeof(Address) } }; // Manually construct a schema - we don't need to call .Build() on the builders // because we have implicit conversion operators defined that will call it for us. // Explicitly calling .Build() is also perfectly fine, if a little more verbose. var config = new RealmConfiguration { Schema = new RealmSchema.Builder { new ObjectSchema.Builder("MyClass", isEmbedded: false) { Property.FromType<int>("Id", isPrimaryKey: true), Property.PrimitiveDictionary("Tags", RealmValueType.String) }, new ObjectSchema.Builder("EmbeddedClass", isEmbedded: true) { Property.Primitive("DateProp", RealmValueType.Date, isNullable: true) } } }; // Enhance an existing model with new properties that will be accessible via // the dynamic API. var personSchema = new ObjectSchema.Builder(typeof(Person)) { Property.FromType<string>("NewStringProp") }; var config = new RealmConfiguration { Schema = new RealmSchema.Builder { personSchema, new ObjectSchema.Builder(typeof(Address)) } }; // Regular Person properties can be accessed as usual while runtime defined ones // need to go through the dynamic API. var person = realm.All<Person>().First(); var name = person.Name; var stringPropValue = person.DynamicApi.Get<string>("NewStringProp");
Foi corrigido um problema que resultaria em SIGABORT no macOS/Linux ao abrir um Realm no modo dinâmico (ou seja, ler o esquema do disco) e o esquema contém um objeto sem propriedades. (Emissão #1978)
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
Interno
- Usando o Núcleo 11.4.1.
- Testes de desempenho movidos para serem executados em um executor auto-hospedado. (PR #2638)
10.5.1 (2021-09-22)
Corrigido
- Corrigido um bug que faria com que um
NullReferenceException
fosse relatado durante a compilação de uma classe contendo uma propriedadeRealmObject
somente para iniciar. (Emissão #2576) - Corrigido um problema que resultaria em
Unable to load DLL 'realm-wrappers'
ao implantar um aplicativo WPF .NET Framework com CliqueOnce. Isso ocorreu devido ao tipo incorreto de BuildAction sendo aplicado às bibliotecas nativas das quais o Realm depende. (Emissão #1877) - [Unity] Foi corrigido um problema que falharia nas compilações do Unity com
Multiple precompiled assemblies with the same name Mono.Cecil.dll
se importar o pacote Realm para um projeto que já faz referência aMono.Cecil
. (Emissão #2630) - Corrigido um bug que às vezes resultava em aggregations não encontrados no tempo de execução em um cenário de borda muito específico. Mais detalhes sobre tal cenário podem ser encontrados na descrição de sua PR. (Emissão #1568)
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
Interno
- Usando o Núcleo 11.4.1.
10.5.0 (2021-09-09)
Melhorias
- O ThreadSafeReference não fixa mais a versão da transação de origem para algo que não seja Resultados apoiados por uma Query. (Atualização de núcleo)
- Uma ThreadSafeReference para um Results apoiado por uma coleção agora pode ser criada dentro de uma transação de gravação , desde que a coleção não tenha sido criada na transação de gravação atual. (Atualização de núcleo)
- Os Realms sincronizados não são mais abertos duas vezes, reduzindo o espaço de endereço e os descritores de arquivo usados pela metade. (Atualização de núcleo)
Corrigido
- Se um objeto com uma chave primária nula foi excluído por outro cliente de sincronização, a exceção
KeyNotFound: No such object
poderá ser acionada. (Atualização de núcleo) - Corrigiu uma condição de corrida que poderia resultar em uma afirmação
m_state == SyncUser::State::LoggedIn
se o aplicativo falhasse anteriormente durante o logout do usuário. (Atualização de núcleo)
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
Interno
- Usando o Núcleo 11.4.1.
- Foi adicionada uma ação para publicar lançamentos no Slack. (Emissão #2501)
- Adicionada tarefa in-line do MSBuild para extrair o changelog da versão mais recente. (Emissão #2558)
- Quando uma versão for bem-sucedida, mescle o PR original, marque a versão e atualize o changelog. (PR #2609)
10.4.1 (2021-09-03)
Corrigido
- Corrigiu uma regressão que impediria o SDK de funcionar em versões mais antigas do Linux. (Emissão #2602)
- Foi corrigido um problema que se manifestou ao contornar a verificação de alteração de uma chave primária ao usar a API dinâmica - ou seja,
myObj.DynamicApi.Set("Id", "some-new-value")
agora lançará corretamente umNotSupportedException
se"some-new-value"
for diferente do valor da chave primária demyObj
. (PR #2601)
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
Interno
- Usando o Núcleo 11.3.1.
- Começado a enviar cobertura de código para coveralls. (Emissão #2586)
- Foi removido o atributo
[Serializable]
dos sucessores do RealmObjectBase. (PR #2600)
10.4.0 (2021-08-31)
Corrigido
- Correção de um problema que faria com que
Logger.Default
no Unity sempre revertesse paraDebug.Log
, mesmo quando um registrador personalizado fosse definido. (Emissão #2481) - Correção de um problema em que
Logger.Console
no Unity ainda usavaConsole.WriteLine
em vez deDebug.Log
. (Emissão #2481) - Foram adicionadas anotações de serialização ao RealmObjectBase para evitar que o newtonsoft.Json e serializadores semelhantes tentem serializar as propriedades de base. (Emissão #2579)
- Corrigido um problema que causaria um
InvalidOperationException
ao remover um elemento de uma coleção vinculada à UI no WPF. (Emissão #1903) - O perfil do usuário agora persiste corretamente entre as execuções. (Atualização de núcleo)
- Corrigiu uma falha ao entregar notificações em uma hierarquia aninhada de listas de RealmValue que contêm sucessores de RealmObject. (Atualização de núcleo)
- Correção de uma falha quando um objeto vinculado por uma propriedade RealmValue era invalidado (somente sincronização). (Atualização de núcleo)
- Corrige a corrupção do histórico prior_size ao substituir um objeto incorporado em uma lista. (Atualização de núcleo)
- Correção de uma falha de asserção no cliente de sincronização ao aplicar uma instrução AddColumn para uma propriedade RealmValue quando essa propriedade já existe localmente. (Atualização de núcleo)
- Corrigiu uma falha de afirmação
Invalid data type
no cliente de sincronização ao aplicar uma instruçãoAddColumn
para uma propriedadeRealmValue
quando essa propriedade já existe localmente. (Atualização de núcleo)
Melhorias
Foram adicionados dois métodos de extensão em
IList
para obter uma coleçãoIQueryable
agrupando a lista:list.AsRealmQueryable()
permite que você obtenha umIQueryable<T>
deIList<T>
que pode ser tratado como uma coleção consultável regular e filtrada/ordenada com LINQ ouFilter(string)
.list.Filter(query, arguments)
filtrará a lista e retornará a coleção filtrada. É aproximadamente equivalente alist.AsRealmQueryable().Filter(query, arguments)
.
A coleção consultável resultante se comportará de forma idêntica aos resultados obtidos chamando
realm.All<T>()
, ou seja, ela emitirá notificações quando alterar e se atualizar automaticamente. (Emissão #1499)Foi adicionado um cache para o esquema do Realm. Isso acelerará as invocações
Realm.GetInstance
ondeRealmConfiguration.ObjectClasses
está explicitamente definido. Os ganhos de velocidade dependerão do número e da complexidade de suas classes de modelo. Um benchmark de referência que testa um esquema contendo todos os tipos de propriedade Realm válidos mostrado um 25% de aumento de velocidade de Realm.GetInstance. (Emissão #2194)Melhore o desempenho da criação de notificadores de collection para Realms com um esquema complexo. Nos SDKs, isso significa que a primeira execução de uma query síncrona, a primeira chamada para assinar notificações fará significativamente menos trabalho no thread de chamada.
Aprimore o desempenho do cálculo de conjuntos de alterações para notificações, especialmente para objetos e gráficos de objetos profundamente aninhados que tenham propriedades Listar ou Definir com um pequeno número de objetos na coleção.
O analisador de query agora aceita o operador
BETWEEN
. Pode ser usado comorealm.All<Person>().Filter("Age BETWEEN {20, 60}")
, que significa "'Idade' deve estar no intervalo aberto ]20;60[". (Atualização de núcleo)
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
Interno
- Usando o Núcleo 11.3.1.
- Foi removido o dicionário RealmStates que costumava manter um dicionário threadlocal de todos os estados dos Realms abertos. Foi usado apenas para detectar Realms abertos durante a exclusão e agora é tratado pelo método nativo
delete_realm_files
. (PR #2251) - Parou de enviar análises para o Mixpanel.
- Iniciado o upload de resultados de benchmark para MongoDB Charts. (Emissão #2226)
- Removidos os fluxos de trabalho de benchmark dedicados do GHA. (Emissão #2562)
- Use o SDK do81 ao construir os wrappers do Windows no Github Actions. (Emissão #2530)
- Fluxo de trabalho do CodeQL adicionado. (Emissão #2155)
- Passou a rastrear os tamanhos de pacote e wrapper ao longo do tempo. (Emissão #2225)
- Foi removido o atributo
[Serializable]
da RealmObjectBase, poisBinarySerializer
agora está obsoleto. (PR #2578) - Trabalho de cobertura de código adicionado às ações do Github. (PR #2581)
- Adicionados testes de CI em execução no Windows 8.1 . (PR #2580)
10.3.0 (2021-07-07)
Observação: esta versão usa o xcframework e ativa o bitcode para as bibliotecas nativas do iOS. Isso aumenta significativamente o tamanho do pacote e pode parecer aumentar o arquivo .ipa ao compilar para iOS. No entanto, a parte do bitcode, bem como as arquiteturas desnecessárias, serão cortadas pela App Store, de modo que o tamanho do download real enviado aos usuários permanecerá inalterado ou menor do que antes.
Corrigido
- Correção de um problema que impedia que
realm-wrappers.dll
fosse carregado no Windows 8.1. (Emissão #2298) - Corrigiu uma falha de asserção ao ouvir alterações em uma lista de misto primitivo que contém links. (Atualização de núcleo)
- Correção de uma falha de asserção ao escutar alterações em um dicionário ou conjunto que contém um link invalidado. (Atualização de núcleo)
- Corrigido um loop recursivo sem fim que poderia causar um Stack Overflow de pilha ao calcular alterações em um conjunto de objetos que continha ciclos. (Atualização de núcleo)
- Adicione o tratamento de colisões à implementação do Dicionário. (Atualização de núcleo)
- Corrigiu uma falha após limpar uma lista ou conjunto de links de conteúdo misto para objetos. (Atualização de núcleo)
- Corrigido um loop recursivo que eventualmente travava ao tentar atualizar o token de um aplicativo de usuário quando ele era revogado por um administrador. Agora, essa situação desconecta o usuário e relata um erro. (Atualização de núcleo)
- Corrigiu uma corrida entre chamar
Realm.DeleteRealm
e abertura simultânea do arquivo de Realm . (Atualização de núcleo) - [Unidade] Código adicionado para preservar os construtores de vários serializadores de base para garantir que a maioria das cargas de trabalho básicas de serialização/deserialização funcione imediatamente. (PR #2489)
Melhorias
- Alterou a biblioteca nativa do iOS para usar o xcframework. Isso significa que a execução do simulador em M1 macs agora é suportada. (Emissão #2240)
- Bitcode adicionado à biblioteca nativa do iOS. Isso não tem efeito sobre o Xamarin.iOS, mas permite que os aplicativos Unity aproveitem as otimizações realizadas pelos servidores da App Store e, eventualmente, ofereçam suporte a novas arquiteturas à medida que são lançadas. (Emissão #2240)
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
- Esta versão usa o xcframework para as bibliotecas nativas do iOS, o que exige Xamarin.iOS 14.14.2.5 ou posterior.
Interno
- Usando o Núcleo 11.0.4.
10.2.1 (2021-06-30)
Esta versão altera a forma como os binários Unity são empacotados e evita a necessidade de ter um pacote Unity extra que contenha as dependências como módulos standalone. Se você estava usando o pacote io.realm.unity-bundled
, remova-o e adicione o io.realm.unity
recém-lançado.
Corrigido
- [Unidade] Foi corrigido um problema em que a falha ao traçar uma montagem devido a erros de modelagem só mostrava um erro nos registros uma vez e, em seguida, falhava ao abrir um Realm com
No RealmObjects. Has linker stripped them?
. Agora, os erros de tecelagem aparecerão em cada tentativa de alteração de código/tema e o erro de tempo de execução sugerirá explicitamente a reexecução manual do tecelão. (Emissão #2310) - [Unidade] Foi corrigido um problema que faria o aplicativo travar ao sair ao usar a Sincronização. (PR #2467)
- [Unity] Foi corrigido um problema que faria o editor Unity no macOS travar após a recarga da montagem se o aplicativo usasse Sincronização. (Emissão #2482)
- Foi corrigido um problema em que uma falha poderia ocorrer no Android x86 devido à conversão incorreta de UInt32 em TableKey e Int64 em ObjKey. (Emissão #2456)
Melhorias
- none
Compatibilidade
- Realm Studio: 11.0.0 ou posterior.
Interno
- Usando o Núcleo 11.0.3.
- GetHashCode() em objetos agora usa a chave de tabela além da chave de objeto . (Emissão #2473)
10.2.0 (2021-06-15)
Corrigido
- Corrigido um bug em que a aplicação de várias cláusulas
OrderBy
em uma query resultaria na anexação de cláusulas umas às outras como se fossem.ThenBy
, em vez de a última cláusula substituir as anteriores. (PR #2255) - Ao especificar explicitamente
SyncConfiguration.ObjectTypes
, adicionou uma verificação para validar o esquema e garantir que todas as classesEmbeddedObject
fossem acessíveis a partir de uma classe herdada deRealmObject
. Mais informações sobre este assunto podem ser encontradas aqui. (PR #2259) - Corrigido um bug que resultaria em um erro semelhante a
Undefined symbols for architecture xxx: "_realm_thread_safe_reference_destroy"
ao criar um projeto Unity para iOS. (Emissão #2318) - O tecelão agora emitirá um erro se você tentar definir uma coleção de
RealmInteger
valores. Isso nunca foi suportado, mas anteriormente falharia silenciosamente, enquanto agora será um erro de tempo de compilação. (Emissão #2308) - Foi corrigido um problema em que o uso de coleção de objetos gerenciados (listas ou resultados) em um projeto Unity resultaria em um binário compilado inválido. (PR #2340)
- Corrigido um vazamento de memória quando um retorno de chamada de resposta de migração é definido, mas o Realm não precisava executá-lo (PR #2331)
- Adicionado de volta o suporte de 32bits para compilações do iOS. (Emissão #2429)
- Avisos redundantes removidos ao criar um projeto Unity para dispositivo que mencionava que o esquema para Realm e Realm.UnityUtils está vazio. (Emissão #2320)
- Foi corrigido um problema que poderia fazer com que
NullReferenceException
fosse lançado se você definisseSyncConfiguration.OnProgress
comonull
logo após chamarRealm.GetInstanceAsync(syncConfig)
. (Emissão #2400) - Ao substituir um objeto incorporado, emita uma instrução de sincronização que define o link para o objeto incorporado como nulo para que ele seja limpo corretamente. Isso resolve um problema que se teria manifesto como
Failed to parse, or apply received changeset: ERROR: ArrayInsert: Invalid prior_size (list size = 4, prior_size = 0)
(#4740 - A implementação Linux do InternalCommitHelper fez funcionar com novas versões do Linux que alteraram o comportamento do epoll, incluindo o Android 12 (Problema n.º4666)
- O formato do arquivo foi alterado da forma que agora - novamente - temos índices de pesquisa em colunas de chave primária . Isso é necessário, pois agora paramos de derivar as ObjKeys dos valores de chave primária , mas apenas usamos um valor de contador crescente. Isso tem o efeito de que todos os novos objetos serão criados no mesmo cluster e não serão espalhados como teriam sido antes. Isso também significa que a atualização do formato de arquivo versão 11 e formatos anteriores será muito mais rápida. (Atualização de núcleo)
Melhorias
Adiciona suporte para o tipo de dados do
Guid
. Ele pode ser usado como chave primária e é indexável. (PR #2120)Adicionar suporte para dicionários. Atualmente, somente chaves de string são suportadas, enquanto o tipo de valor pode ser qualquer um dos tipos suportados (os tipos primitivos,
RealmValue
ou tipos personalizados que herdam de RealmObject/EmbeddedObject). Listas, conjuntos ou outros dicionários não podem ser usados como o tipo de valor. Para adicionar um dicionário ao seu modelo, defina uma propriedade somente para iniciar do tipoIDictionary<string, T>
:public class MyObject : RealmObject { public IDictionary<string, decimal> Denominations { get; } } // Realm will automatically manage the underlying dictionary, so there's no need // to define a constructor or assign it to some value. var obj = new MyObject(); obj.Denominations.Add("quarter", 0.25d);
Adiciona suporte para o tipo de dados
RealmValue
. Este novo tipo pode representar qualquer tipo de dados Realm válido, incluindo objetos. Collections (listas, conjuntos e dicionários) deRealmValue
também são suportadas, mas oRealmValue
em si não pode conter collections. Observe que uma propriedade do tipoRealmValue
não pode ser anulável, mas pode conter nulo, representado pelo valorRealmValue.Null
. (PR #2252)public class MyObject : RealmObject { public RealmValue MyValue { get; set; } public IList<RealmValue> ValuesList { get; } public ISet<RealmValue> ValuesSet { get; } public IDictionary<string, RealmValue> ValuesDict { get; } } var obj = new MyObject(); obj.MyValue = RealmValue.Null; obj.MyValue = 1; obj.MyValue = "abc"; if (obj.MyValue.Type == RealmValueType.String) { var myString = obj.MyValue.AsString(); }
Adicione suporte para conjuntos de objetos ou valores primitivos. Conjuntos são collections não ordenadas que garantem a exclusividade de seus elementos. O Realm usa seu comparador de igualdade interno e não é possível personalizar seu comportamento substituindo
Equals
ouGetHashCode
em suas classes personalizadas. Os objetos sempre serão comparados por referência db - ou seja, dois objetos distintos no banco de dados de dados sempre serão diferentes, mesmo que seu conteúdo seja idêntico, e múltiplas referências ao mesmo objeto de banco de dados de dados sempre serão iguais.public class MyObject : RealmObject { public ISet<string> UniqueStrings { get; } } // Realm will automatically manage the underlying set, so there's no need // to define a constructor or assign it to some value. var obj = new MyObject(); var didAdd = obj.UniqueStrings.Add("foo"); // true didAdd = obj.UniqueStrings.Add("foo"); // false
Suporte adicionado para substituição de valor em queries baseadas em string. Isto habilita expressões seguindo esta sintaxe:
realm.All<T>().Filter("field1 = $0 && field2 = $1", 123, "some-string-value")
. (Emissão #1822)Tamanho dos binários nativos reduzido em ~5%. (PR #2239)
Foi adicionada uma nova classe -
Logger
, que permite substituir a implementação padrão do registrador (anteriormente da escrita emstdout
oustderr
) por uma personalizada, ao definirLogger.Default
. Isso substituiAppConfiguration.CustomLogger
eAppConfiguration.LogLevel
que serão removidos em uma versão futura. As implementações integradas são:Console
- usa oSystem.Console
para a maioria dos projetos eUnityEngine.Debug
para projetos do Unity:Logger.Default = Logger.Console;
Null
- ignora todas as mensagens:Logger.Default = Logger.Null;
Function
- chamadas de proxy para uma função fornecida:Logger.Default = Logger.Function(message => myExternalLogger.Log(message));
Os loggers personalizados podem derivar da classe
Logger
e fornecer sua própria implementação para o métodoLog
ou usarFunction
e fornecer umAction<string>
. (PR #2276)RealmObjectBase
agora substitui e implementa corretamenteGetHashCode()
. (Emissão #1650)Foi adicionada uma substituição de
RealmObject.ToString()
para gerar informações mais significativas sobre o conteúdo do objeto. Ele produzirá o tipo do objeto, a chave primária (se houver uma definida), bem como informações se o objeto é gerenciado ou excluído. (Emissão #2347)Nova API adicionada para acessar dinamicamente as propriedades do objeto. Eles são projetados para suportar plataformas compiladas antecipadamente, como Xamarin.iOS e Unity com compilação IL2C++. A intenção é eventualmente torná-las a API padrão, ao mesmo tempo em que oferece suporte à API herdada baseada em DLR. Exemplo:
// Make sure to cast away the dynamic immediately on AOT platforms. var people = (IQueryable<RealmObject>)realm.DynamicApi.All("Person"); foreach (var person in people) { var firstName = person.DynamicApi.Get<string>("FirstName"); var address = person.DynamicApi.Get<EmbeddedObject>("Address"); var city = address.DynamicApi.Get<string>("City"); } // When casting a dynamic object, always cast first to object and then // to the actual object type to remove any callsites being generated. var newPerson = (RealmObject)(object)realm.DynamicApi.Create("Person", 123); newPerson.DynamicApi.Set("FirstName", "Peter");
Foi adicionada uma opção do Editor Unity para habilitar a montagem de editores de tecelagem. Isso deve estar "desativado", a menos que seu projeto tenha aries de Editor que façam referência ao Realm - por exemplo, um conjunto de teste EditMode que testa a funcionalidade relacionada ao Realm. Mantê-lo "ligado" pode desacelerar um pouco as construções, pois mais montagens precisarão ser avaliadas para tecelagem. (Emissão #2346)
Agora façamos um backup do arquivo de domínio antes de qualquer atualização de formato de arquivo. A cópia de segurança é mantida por 3 meses. Backups de antes de uma atualização de formato de arquivo permitem uma melhor análise de qualquer falha de atualização. Também restauramos um backup, se a) for feita uma tentativa de abrir um arquivo de Realm com um formato de arquivo "futuro" eb) houver um arquivo de backup que se ajuste ao formato de arquivo atual. (#4166)
Compatibilidade
- Realm Studio: 11.0.0-alfa.0 ou posterior.
Interno
- Usando o Núcleo 11.0.3.
- Compilações de LTO habilitadas para todas as plataformas, exceto Android. (PR #2239)
- Projetos de teste atualizados para dotnetcore 3.1. Isso significa que os testes não são mais executados no dotnetcore 2.0.
- Remoção da compilação Lambda no ResultsVisitor quando encontramos um operador de conversão. Isso é necessário porque o IL2C++ não pode compilar lambdas dinamicamente. Em vez disso, agora estamos usando
Operator.Convert<TTarget>(object)
, que é um pouco menos eficiente queOperator.Convert<TSource, TTarget>
, mas ainda assim é um pouco mais rápido queConvert.ChangeType
e também não padece das falhas da conversãoDecimal128
. A principal desvantagem é que não ofereceremos mais suporte a queries com um argumento que seja um tipo de usuário personalizado com um operador de conversão implícita definido.
10.1.4 (2021-05-12)
Corrigido
- Corrigido um bug que poderia causar falhas com uma mensagem semelhante a
Invalid ref translation entry [0, 78187493520]
. (Atualização de núcleo) - Corrija falhas de asserção, como
!m_notifier_skip_version.version
oum_notifier_sg->get_version() + 1 == new_version.version
, ao executar gravações em chamadas de resposta de notificação de alteração. (Atualização de núcleo) - Corrija os relatórios de notificação de coleção para modificações. Isso pode ser observado ao receber os índices errados de modificações em resultados classificados ou distintos, ou blocos de notificação às vezes não sendo chamados quando apenas modificações ocorreram. (Atualização de núcleo)
- Verifique proativamente o tempo de expiração no token de acesso e atualize-o antes de tentar iniciar uma sessão de sincronização. Isso evita que alguns logs de erro apareçam no cliente, como:
ERROR: Connection[1]: Websocket: Expected HTTP response 101 Switching Protocols, but received: HTTP/1.1 401 Unauthorized
. (Atualização de núcleo) - A destruição do TableRecycler na saída não foi ordenada em comparação com outras threads em execução. Isso pode levar a falhas, algumas com o TableRecycler no topo da pilha. (Atualização de núcleo)
- Corrigiu erros relacionados a
uncaught exception in notifier thread: N5realm11KeyNotFoundE: No such object
. Isso pode acontecer em um aplicativo sincronizado quando um objeto vinculado é excluído por outro cliente. (Atualização de núcleo) - Abrir um domínio de metadados com a chave de encriptação errada ou uma configuração de criptografia diferente removerá esse domínio de metadados e criará um novo domínio de metadados usando a nova chave ou configuração. (Atualização de núcleo)
- Criar um
ThreadSafeReference
em um Realm somente leitura resultaria em uma falha. (Atualização de núcleo)
Compatibilidade
- Realm Studio: 10.0.0 ou posterior.
Interno
- Usando o Núcleo 10.7.2.
10.1.3 (2021-04-29)
Corrigido
- Corrigido um bug do compilador que resultaria na geração de um erro
"Access violation"
ao usar a sincronização no Windows.
Compatibilidade
- Realm Studio: 10.0.0 ou posterior.
Interno
- Usando o Núcleo 10.5.6.
10.1.2 (2021-03-19)
Corrigido
- Em dispositivos de 32bits, você pode obter uma exceção com "Nenhum objeto" ao atualizar para a versão10. (Atualização de núcleo)
- O thread de trabalho de notificação reexecutaria queries após cada commit, em vez de apenas fazer commits de tabelas modificadas que poderiam afetar os resultados da query se a tabela tivesse links de saída para tabelas não usadas na query. (Atualização de núcleo)
- Corrija a falha de asserção "Entrada de tradução de referência inválida [16045690984833335023, 78187493520]" que pode ocorrer ao usar a sincronização ou vários processos de gravação em um único Arquivo de Realm. (Atualização de núcleo)
- Durante a integração de uma grande quantidade de dados do servidor, você pode obter
"Assertion failed: !fields.has_missing_parent_update()"
. (Atualização de núcleo) - A sincronização de valores decimais grandes128 causará
"Assertion failed: cx.w[1] == 0"
. (Atualização de núcleo) - Evite condição de corrida que levam a possíveis travamentos no Windows. (Atualização de núcleo)
Melhorias
- none
Corrigido
- none
Compatibilidade
- Realm Studio: 10.0.0 ou posterior.
Interno
- Usando o Núcleo 10.5.6.
10.1.1 (2021-02-25)
Corrigido
- Foi corrigido um problema que resultaria na rejeitação de aplicativos UWP pelo Microsoft Store devido ao uso de uma API (
__C_specific_handler
) não suportada. (Emissão #2235) - O thread do ouvinte de notificações do Realm pode, às vezes, atingir a falha de asserção "!skip_version.version" se uma transação de gravação tiver sido confirmada em um momento muito específico. (Atualização de núcleo)
Melhorias
- none
Corrigido
- none
Compatibilidade
- Realm Studio: 10.0.0 ou posterior.
Interno
- Usando o Núcleo 10.5.3.
10.1.0 (2021-02-09)
Melhorias
- O cliente de sincronização agora registra mensagens de erro recebidas do servidor , em vez de apenas o tamanho da mensagem de erro. (Atualização de núcleo)
- Os erros retornados do servidor quando os WebSockets de sincronização são fechados agora são capturados e exibidos como um SyncError. (Atualização de núcleo)
- Desempenho drasticamente aprimorado de leituras sequenciais em uma query sem filtro. (Atualização de núcleo)
Corrigido
- Correção de um problema ao usar uma query congelada em threads com diferentes versões de transação que resultavam na possibilidade de acessar objetos de uma versão futura na coleção congelada. (Atualização de núcleo)
- Corrigido um problema em que a criação de um objeto após a atualização do formato do arquivo poderia falhar com a asserção "Falha na afirmação: lo() <= std::numeric_limits<uint32_t>::max()" (atualização do Core)
- Corrigido um problema em que obter um elemento de um resultado de query sem um filtro daria resultados incorretos se um novo objeto fosse criado no índice zero na tabela de origem. (Atualização de núcleo)
- Foi corrigido um problema em que, durante a sincronização, o aplicativo falhava com
Assertion failed: ref + size <= next->first
. (Atualização de núcleo)
Compatibilidade
- Realm Studio: 10.0.0 ou posterior.
Interno
- Usando o Núcleo 10.5.0.
- Corrige a versão analítica que está sendo enviada.
10.0.1 (2021-02-02)
Mudanças de última hora
- Não há mais suporte para o Realm Cloud (legado), mas para o novo MongoDB Realm Cloud. O MongoDB Realm é uma plataforma sem servidor que permite aos desenvolvedores criar aplicativos rapidamente sem ter que configurar a infraestrutura do servidor . O MongoDB Realm é construído sobre o MongoDB Atlas, integrando automaticamente a conexão com seu banco de dados de dados . (#2011)
- Remove o suporte para sincronização baseada em query, incluindo os parâmetros de configuração e os tipos de
SyncSubscription
. (#2011) - Remova tudo o que estiver relacionado a permissões de sincronização, incluindo o sistema de permissões baseado em caminho e os privilégios em nível de objeto para sincronização baseada em query. As permissões no MongoDB Realm são definidas do lado do servidor. (#2011)
- Foi movida toda a API para acesso dinâmico na classe
Realm
paraRealm.DynamicApi
:Realm.CreateObject(string className, object primaryKey)
agora éRealm.DynamicApi.CreateObject(string className, object primaryKey)
.Realm.All(string className)
agora éRealm.DynamicApi.All(string className)
.Realm.RemoveAll(string className)
agora éRealm.DynamicApi.RemoveAll(string className)
.Realm.Find(string className, long? primaryKey)
agora éRealm.DynamicApi.Find(string className, long? primaryKey)
.Realm.Find(string className, string primaryKey)
agora éRealm.DynamicApi.Find(string className, string primaryKey)
.
- Agora é necessário que todos os objetos de nível superior em um Realm sincronizado tenham uma chave primária chamada
_id
. Você pode usar o atributoMapTo("_id")
para evitar o uso de nomes não idiomáticos para as propriedades do modelo. - Aumentou a meta mínima para aplicativos Xamarin.iOS para iOS 9.
- Aumentou o nível mínimo da API para aplicativos Xamarin.Android para 16 (Android 4.1).
- Renomeado
FullSyncConfiguration
paraSyncConfiguration
. RealmObject.FreezeInPlace
removido. Para congelar um objeto de Realm , use o método de extensãoFreeze
. (Emissão #2180)
Melhorias
Suporte adicionado para sincronização com MongoDB em vez do Realm Object Server. Os aplicativos devem ser criados em pt-br-65226573521031e5e.getsmartling.com/pt-br.
Foi adicionada uma classe
App
que é o ponto de entrada para sincronização com um aplicativo MongoDB Realm.Adicionado
User.CustomData
contendo um documento não estruturado com informações adicionais sobre o usuário. Os dados personalizados são configurados em seu aplicativo MongoDB Realm.User.Functions
adicionado. Este é o ponto de entrada para chamar funções do MongoDB Realm remoto. As funções permitem definir e executar a lógica do lado do servidor para seu aplicativo. As funções são escritas em JavaScript moderno (ES6+) e executadas sem servidor. Ao chamar uma função, você pode acessar dinamicamente os componentes do aplicativo atual, bem como informações sobre a solicitação para executar a função e o usuário conectado que enviou a solicitação.Adicionado
User.GetMongoClient
expondo uma API para operações CRUD em um Serviço MongoDB Remoto.Adicionado
User.GetPushClient
expondo uma API para registrar um dispositivo para notificações push.Altere
SyncConfiguration
para aceitar o valor da partição em vez de um URL de servidor. Atualmente, os valores de partição podem ser dos tiposstring
,long
ouObjectId
. Abrir um domínio por valor de partição é equivalente à abertura anterior de um domínio por URL. Nesse caso, as partições devem estar mais associadas aos seus dados. Por exemplo, se você for um grande revendedor com vários locais, a chave de partição pode ser o ID da loja e cada Realm conterá apenas dados relacionados à loja especificada.Adiciona suporte para o tipo de dados Decimal128 . Esse é um número de ponto flutuante decimal 128-bit IEEE 754 . Propriedades deste tipo podem ser declaradas como
MongoDB.Bson.Decimal128
tipo ou o tipodecimal
embutido. Observe que o decimal integrado do .NET é 96-bit, portanto, ele não pode representar a faixa completa de números, representáveis porDecimal128
. (PR #2014)Adiciona suporte para o tipo de dados do
ObjectId
. Este é um identificador exclusivo 12 bytes que é comum como ID de documento nos bancos de dados MongoDB . Pode ser usado como chave primária. (PR #2035)Adicione suporte para objetos embarcados. Objetos embarcados são objetos que pertencem a um único objeto pai e são excluídos quando esse objeto pai é excluído ou seu pai não faz referência a eles. Objetos embarcados são declarados subclassificando
EmbeddedObject
em vez deRealmObject
. A reatribuição de um objeto incorporado não é permitida, e nem a vinculação a ele a partir de vários pais. A query direta de objetos incorporados também não é permitida, pois eles devem ser vistos como estruturas complexas pertencentes a seus pais, em vez de objetos autônomo . Um exemplo trivial é:public class Address : EmbeddedObject { public string Street { get; set; } public string City { get; set; } } public class Person : RealmObject { public string Name { get; set; } // Address is an embedded object - you reference it as usual public Address Address { get; set; } } public class Company : RealmObject { public string PhoneNumber { get; set; } // Embedded objects can be contained in lists too public IList<Address> OfficeAddresses { get; } }
Adicionados novos métodos dinâmicos para instanciar objetos embarcados:
Realm.DynamicApi.CreateEmbeddedObjectForProperty
deve ser usado para criar um objeto incorporado e atribuí-lo à propriedade de um pai. Por exemplo:// static API var person = new Person(); person.Address = new Address { City = "New York" }; // dynamic API var dynamicPerson = realm.DynamicApi.CreateObject("Person"); var address = realm.DynamicApi.CreateEmbeddedObjectForProperty(dynamicPerson, "Address") address.City = "New York";
Realm.DynamicApi.AddEmbeddedObjectToList
deve ser usado para criar um objeto incorporado e adicioná-lo à propriedade de lista de um pai.Realm.DynamicApi.InsertEmbeddedObjectInList
deve ser usado para criar um objeto incorporado e inseri-lo na propriedade de lista de um pai em um índice especificado.Realm.DynamicApi.SetEmbeddedObjectInList
deve ser usado para criar um objeto incorporado e defini-lo em um índice na propriedade de lista de um pai.// static API var company = new Company(); company.OfficeAddresses.Add(new Address { City = "New York" }); company.OfficeAddresses.Insert(0, new Address { City = "Palo Alto" }); company.OfficeAddresses[1] = new Address { City = "New Jersey" }; // dynamic API var dynamicCompany = realm.DynamicApi.CreateObject("Company"); var officeToAdd = realm.DynamicApi.AddEmbeddedObjectToList(dynamicCompany.OfficeAddresses); officeToAdd.City = "New York"; var officeToInsert = realm.DynamicApi.InsertEmbeddedObjectInList(dynamicCompany.OfficeAddresses, 0); officeToInsert.City = "Palo Alto"; var officeToSet = realm.DynamicApi.SetEmbeddedObjectInList(dynamicCompany.OfficeAddresses, 1); officeToSet.City = "New Jersey";
O esquema de mapeamento de memória para arquivos Realm mudou para melhor suporte à abertura de arquivos muito grandes.
Substituiu a implementação do analisador de query de string (aquele usado para
realm.All().Filter("some-string-query")
). Isso resulta em ~5% de redução do tamanho do binário nativo, mantendo os tempos de execução da query equivalentes ao analisador antigo. (PR #2185, atualização do Core)Otimizou o código interno que lida com conversões entre tipos. Isso deve resultar em um pequeno aumento de desempenho para a maioria das operações de dados que deve ser mais perceptível em plataformas compiladas Ahead-of-Time, como iOS/UWP. Devido à natureza da alteração, é possível que as conversões que antes ocorriam automaticamente ao trabalhar com objetos dinâmicos não o façam mais. Se você encontrar um
NotSupportedException
com a mensagemNo conversion exists from *type A* to *type B*
e acreditar que isso é um bug, abra um Problema no Github. (PR #2149)Foi adicionada uma verificação extra de tempo de compilação para detectar listas errôneas
declarações e sugerir IList para propriedades de coleção em objetos de Realm. (Emissão #2083) Sobrecargas adicionadas para
Realm.Write
eRealm.WriteAsync
que podem retornar um valor. (Emissão #2081)
Corrigido
- Trabalhou em torno de um problema com o compilador .NET Native (usado em projetos UWP) que resultaria na seguinte exceção sendo lançada na versão:
Incompatible MarshalAs detected in parameter named 'value'. Please refer to MCG's warning message for more information.
. (Emissão #2169) - Corrigido um bug que poderia fazer com que valores de propriedade incorretos fossem lidos durante uma migração para aplicativos executados no .NET Core 3.0 ou mais recente. O problema se expressa quando classes diferentes persistem propriedades com o mesmo nome e podem resultar no acesso à propriedade errada - por exemplo
foo.Name
pode retornarfoo.Bar
. Isso só pode acontecer ao usar a API dinâmica durante uma migração e não afeta os aplicativos que usam a API fortemente digitada ou são executados em plataformas diferentes do .NET Core 3.x/ .NET 5. - Corrigido um bug que poderia causar um bloqueio em um cenário de vários processos em que vários processos compartilhavam o mesmo Arquivo de Realm e escutavam notificações do arquivo. (Atualização de núcleo)
- Correção de um problema com a exclusão e recriação de objetos com objetos incorporados. (Atualização de núcleo)
- Corrigir uma condição de corrida que levaria a "exceção não detectada no tópico do notificador: N5Realm15InvalidTableRefE: transaction_ended" e uma falha quando o domínio de origem era Realm ou invalidado em um momento muito específico durante a primeira execução de uma coleção notifier (atualização do Core)
- Correção de falha em query sem distinção entre maiúsculas e minúsculas em colunas de string indexadas quando nada corresponder (atualização do núcleo)
Compatibilidade
- Realm Studio: 10.0.0 ou posterior.
Interno
- Usando o Núcleo 10.3.3.
- Migrado para o analisador bison.
- Envie análises para S3/Segment além do Mixpanel.
- O Analytics agora também informa se a funcionalidade de sincronização está em uso.
- O SDK agora também foi testado com o .NET 5.
- Esta versão usa versões de monorepo que agrupam Core, Sync e OS.
- Operador baseado em expressões substituído por T4. (PR #2149)
5.1.3 (2021-02-10)
Corrigido
- Se você fizer uma query sem distinção entre maiúsculas e minúsculas em uma coluna de string indexada, ela poderá falhar de uma forma que resultará em uma exceção "Nenhuma chave". (Atualização de núcleo)
- Corrige falha na query insensível a maiúsculas e minúsculas em colunas de string indexadas quando nada corresponde. (Atualização de núcleo)
- Arquivos atualizados em dispositivos de 32bits podem acabar sendo inconsistentes, resultando na exceção "Chave não encontrada" a ser removida. (Atualização de núcleo)
- Corrigido um problema em que a criação de um objeto após a atualização do formato de arquivo pode falhar com a afirmação
Assertion failed: lo() <= std::numeric_limits<uint32_t>::max()
. (Atualização de núcleo)
Compatibilidade
- Servidor de objetos de Realm : 3.23.1 ou posterior.
- Realm Studio: 5.0.0 ou posterior.
Interno
- Usando Sync 5.0.32 e Core 6.2.3.
- Atualizou o exemplo QuickJournal para as versões mais recentes do Realm e Xamarin.Forms. (PR #2057)
5.1.2 (2020-10-20)
Corrigido
- Foi corrigido um problema que resultaria na lançamento de uma exceção
Realm accessed from incorrect thread
ao acessar uma instância de Realm na thread principal de aplicativos UWP. (Emissão #2045)
Compatibilidade
- Servidor de objetos de Realm : 3.23.1 ou posterior.
- Realm Studio: 5.0.0 ou posterior.
Interno
- Usando Sync 5.0.28 e Core 6.1.3.
- Atualizou o exemplo QuickJournal para as versões mais recentes do Realm e Xamarin.Forms. (PR #2057)
5.1.1 (2020-10-02)
Melhorias
- none
Corrigido
- A query de uma propriedade indexada pode fornecer uma exceção de "Chave não encontrada". (Atualização de núcleo)
- Corrija queries para nulo em colunas de número inteiro indexado não anuláveis retornando resultados para zero entradas. (Atualização de núcleo)
Compatibilidade
- Servidor de objetos de Realm : 3.23.1 ou posterior.
- Realm Studio: 5.0.0 ou posterior.
Interno
- Usando Sync 5.0.28 e Core 6.1.3.
5.1.0 (2020-09-30)
Melhorias
- Melhora muito o desempenho de queries not in em string indexadas ou colunas int. (Atualização de núcleo)
Corrigido
- Corrigido um problema que causaria o uso do Realm na thread principal em aplicativos WPF para lançar uma exceção com uma mensagem de "Realm acessado a partir do thread incorreto". (Emissão #2026)
- Foi corrigido um problema que poderia causar uma exceção com a mensagem "A abertura de arquivos do Realm da versão de formato 0 não é suportada por esta versão do Realm" ao abrir um Realm criptografado. (Atualização de núcleo)
- Melhora ligeiramente o desempenho da maioria das operações que leem dados do Arquivo de Realm. (Atualização de núcleo)
- A reexecução de uma query igual em uma coluna de string indexada que anteriormente tinha mais de uma correspondência e agora tem uma correspondência, às vezes, lançava uma exceção de "chave não encontrada". (Atualização de núcleo)
- Ao executar query de uma tabela onde os links fazem parte da condição, o aplicação pode travar se objetos tiverem sido adicionados recentemente à tabela de destino. (Atualização de núcleo)
Compatibilidade
- Servidor de objetos de Realm : 3.23.1 ou posterior.
- Realm Studio: 5.0.0 ou posterior.
Interno
- Usando Sync 5.0.27 e Core 6.1.2.
- Adição de nuget feed de pré-lançamento por meio de pacotes doGithub . (PR #2028)
5.0.1 (2020-09-10)
NOTA: esta versão aumenta o formato de Arquivo de Realm para a versão 11. Não é possível fazer o downgrade para a versão 10 ou anterior. Os arquivos criados com versões mais antigas do Realm serão atualizados automaticamente. Somente o Realm Studio 5.0.0 ou posterior poderá abrir o novo formato de arquivo.
Melhorias
- Foi adicionada a noção de "objetos congelados" - são objetos, queries, listas ou Realms que foram "congelados" em uma versão específica. Isso permite que você acesse os dados de qualquer thread, mas nunca mudará. Todos os objetos congelados podem ser acessados e consultados normalmente, mas tentar alterá-los ou adicionar ouvintes de alteração gerará uma exceção. (Emissão #1945)
- Adicionados
Realm.Freeze()
,RealmObject.Freeze()
,RealmObject.FreezeInPlace()
,IQueryable<RealmObject>.Freeze()
,IList<T>.Freeze()
eIRealmCollection<T>.Freeze()
. Esses métodos produzirão a versão congelada da instância na qual são chamados. - Adicionados
Realm.IsFrozen
,RealmObject.IsFrozen
eIRealmCollection<T>.IsFrozen
, que retorna se os dados estão congelados ou não. RealmConfigurationBase.MaxNumberOfActiveVersions
adicionado. Definir isso fará com que o Realm lance uma exceção se muitas versões dos dados do Realm estiverem ativas ao mesmo tempo. Ter muitas versões pode aumentar drasticamente o tamanho do arquivo do Realm.
- Adicionados
- Adiciona suporte para Realms confinados a
SynchronizationContext
. Em vez de serem vinculados a um thread específico, os Realms confinados por fila são vinculados a umSynchronizationContext
, independentemente de ele despachar trabalho no mesmo thread ou em um thread diferente. Abrir um Realm quandoSynchronizationContext.Current
é nulo - principalmenteTask.Run(...)
- ainda confinará o Realm ao thread em que foi aberto. - O armazenamento de blobs binários grandes em arquivos Realm não força mais o arquivo a ter pelo menos 8x o tamanho do maior blob.
- Reduza o tamanho dos registros de transações armazenados no Arquivo de Realm, reduzindo o crescimento do tamanho do arquivo de transações grandes.
- As chaves primárias de string não exigem mais um índice separado, melhorando o desempenho de inserção e exclusão sem prejudicar o desempenho da pesquisa.
Corrigido
Access to invalidated List object
corrigido sendo lançado ao adicionar objetos a uma lista e, ao mesmo tempo, excluir o objeto que contém a lista. (Emissão #1971)- Corrigiu resultados incorretos sendo retornados ao usar
.ElementAt()
em uma query onde um filtro de string com uma cláusula de classificação foi aplicado. (PR #2002)
Compatibilidade
- Servidor de objetos de Realm : 3.23.1 ou posterior.
- Realm Studio: 5.0.0 ou posterior.
Interno
- Usando Sync 5.0.22 e Core 6.0.25.
4.3.0 (2020-02-05)
Melhorias
- Expôs uma API para configurar o
userId
eisAdmin
de um usuário ao criar credenciais viaCredentials.CustomRefreshToken
. Anteriormente, esses valores seriam inferidos a partir do próprio JSON web token, mas como não há como impor a configuração do servidor sobre quais campos na carga útil do JSON web token representam ouserId
e oisAdmin
campo, agora cabe ao consumidor para determinar os valores para estes. - Registro e tratamento de erros aprimorados para problemas de SSL em plataformas Apple.
Corrigido
- Objetos de Realm agora podem ser serializados corretamente com serializadores
System.Runtime.Serialization.Formatters
eSystem.Xml.Serialization
. (Problema #1913) Os campos de estado privado da classe foram codificados com atributos[NonSerialized]
e[XmlIgnore]
para que os serializadores de opt-out ansiosos não tentem serializar campos comoRealm
eObjectSchema
que contêm lida com dados não gerenciados. - Foi corrigido um problema que resultaria em um erro de compilação quando
[Required]
fosse aplicado na propriedadeIList<string>
. (Contribuído por vaphyllum) - Corrigido um problema que impedia que projetos que incluem o pacote Realm NuGet fossem depurados. (PR #1927)
- O cliente de sincronização não conseguiria se reconectar após não integrar um conjunto de alterações. O bug levaria a uma corrupção adicional do arquivo Realm do cliente. (desde 3.0.0).
- O analisador de query baseado em string (
results.Filter(...)
) costumava precisar do prefixoclass_
para nomes de classe ao executar query de propriedades de backlink . Isso foi corrigido para que somente o nome públicoObjectSchema
seja necessário. Por exemplo,@links.class_Person.Siblings
torna-se@links.Person.Siblings
. - Corrigido um problema em que
ClientResyncMode.DiscardLocalRealm
não redefinia o esquema.
Compatibilidade
- Servidor de objetos de Realm : 3.23.1 ou posterior.
Interno
- Sincronização atualizada de 4.7.5 para 4.9.5 e Core de 5.23.3 para 5.23.8.
4.2.0 (2019-10-07)
Melhorias
- Adicionados
int IndexOf(object)
ebool Contains(object)
à interfaceIRealmCollection
. (PR #1893) - Foi exposta uma API -
SyncConfigurationBase.EnableSessionMultiplexing()
que permite alternar a multiplexação de sessão no cliente de sincronização. (PR 1896) - Suporte adicionado para downloads iniciais mais rápidos ao usar
Realm.GetInstanceAsync
. (Emissão 1847) - Foi adicionado um argumento opcional
cancellationToken
aRealm.GetInstanceAsync
, permitindo o cancelamento limpo do download em andamento. (PR 1859) - Suporte adicionado para ressincronização do cliente, que recuperará automaticamente o Realm local caso o servidor seja revertido. Isso substitui amplamente o mecanismo de reinício do cliente por Realms totalmente sincronizados. Pode ser configurado utilizando
FullSyncConfiguration.ClientResyncMode
. (PR #1901) - Torna o argumento
createUser
emCredentials.UsernamePassword
opcional. Se não for especificado, o usuário será criado ou conectado se já existir. (PR #1901) - Utiliza o Fody 6.0.0, que resolve alguns dos problemas de compatibilidade com versões mais recentes de outros projetos baseados no Fody. (Emissão #1899)
Corrigido
- Corrigiu uma recursão infinita ao chamar
RealmCollectionBase<T>.IndexOf
. (Emissão #1892)
Compatibilidade
- Servidor de objetos de Realm : 3.23.1 ou posterior.
Interno
- Sincronização atualizada de 4.7.0 para 4.7.1.
- Acesso direto implementado aos trabalhadores de sincronização no Cloud, ignorando o Proxy de Sincronização: a associação substituirá o prefixo de URL da sessão de sincronização se a resposta de atualização do token para um Realm contiver um campo de caminho do trabalhador de sincronização.
4.1.0 (2019-08-06)
Mudanças de última hora
- Foi removido o parâmetro
isAdmin
deCredentials.Nickname
. De qualquer forma, ele não tem nenhum efeito nas novas versões do ROS, pois o login de um usuário com apelido de administrador não é suportado - essa alteração apenas o torna explícito. (Emissão #1879) - Marcado o método
Credentials.Nickname
como obsoleto - o suporte para o provedor de autenticação do apelido está obsoleto no ROS e será removido em uma versão futura. (Emissão #1879) - O parâmetro
deleteRealm
dePermissionDeniedException.DeleteRealmInfo
foi removido, pois passarfalse
não tem efeito. Chamar o método agora é equivalente a chamá-lo comdeleteRealm: true
. (PR #1890)
Melhorias
- Suporte adicionado para caracteres unicode no caminho do domínio e nos nomes de arquivos para Windows. (Atualização de núcleo)
- Adicionado novo tipo de credenciais:
Credentials.CustomRefreshToken
que pode ser usado para criar um usuário com um token de atualização personalizado. Isso será então validado pelo ROS em relação aorefreshTokenValidators
configurado para obter tokens de acesso ao abrir um Realm. Ao criar um usuário como esse, é responsabilidade do desenvolvedor garantir que o token seja válido e atualizado conforme necessário para garantir que os tokens de acesso possam ser obtidos. Para esse fim, agora você pode definir o token de atualização de um objeto de usuário chamandoUser.RefreshToken = "my-new-token"
. Isso só deve ser usado em combinação com usuários obtidos ligando paraCredentials.CustomRefreshToken
. (PR #1889)
Corrigido
- A construção de um IncludeDescriptor fez comparações de tabela desnecessárias. Isso resultava em desempenho ruim ao criar uma assinatura baseada em query (
Subscription.Subscribe
) comincludedBacklinks
. (Atualização de núcleo) - Queries envolvendo uma coluna int indexada que fosse restrita por um LinkList com uma ordem diferente da ordem da tabela dariam resultados incorretos. (Atualização de núcleo)
- As queries envolvendo uma coluna int indexada tinham um vazamento de memória se executadas várias vezes. (Atualização de núcleo)
Compatibilidade
- Servidor de objetos de Realm : 3.23.1 ou posterior.
Interno
- Sincronização atualizada de 4.5.1 para 4.7.0 e Core 5.20.0 para 5.23.1.
4.0.1 (2019-06-27)
Corrigido
Foi corrigido um problema que impedia que aplicativos iOS fossem publicados na App Store com o seguinte erro:
Este pacote payload/.../Frameworks/realm-wrappers.framework é inválido. O arquivo Info.plist não tem a chave necessária: CFBundleVersion.
(Edição 1870, desde 4.0.0)
Correção de um problema que fazia com que aplicativos iOS travassem no dispositivo após o lançamento. (Edição 1871, desde 4.0.0)
4.0.0 (2019-06-13)
Mudanças de última hora
- Os seguintes métodos e classes obsoletos foram removidos:
- A classe
SyncConfiguration
foi divisão emFullSyncConfiguration
eQueryBasedSyncConfiguration
. Use uma dessas classes para se conectar ao Realm Object Server. - O método
TestingExtensions.SimulateProgress
foi removido porque não funcionava há algum tempo. - A propriedade
Property.IsNullable
foi removida. Para verificar se uma propriedade é anulável, verifiqueProperty.Type
para o sinalizadorPropertyType.Nullable
. - A classe
Credentials.Provider
foi removida. Anteriormente, ele continha algumas constantes que eram destinadas principalmente ao uso interno. - O método
User.ConfigurePersistance
foi substituído porSyncConfigurationBase.Initialize
. User.LogOut
foi removido a favor deUser.LogOutAsync
.User.GetManagementRealm
foi removido a favor do conjuntoUser.ApplyPermissionsAsync
da API wrapper .User.GetPermissionRealm
foi removido a favor da API wrapperUser.GetGrantedPermissions
.
- A classe
- Descontinuado o método de extensão
IQueryable<T>.Subscribe(string name)
em favor deIQueryable<T>.Subscribe(SubscriptionOptions options)
. - Reformulada a implementação interna da API de permissão. Na maioria das vezes, as assinaturas de método não foram alteradas ou, onde foram alteradas, a API manteve-se próxima do original (por exemplo
IQueryable<T>
mudou paraIEnumerable<T>
). (Edição #1863)- Alterado o tipo de retorno de
User.GetGrantedPermissionsAsync
deIQueryable<PathPermission>
paraIEnumerable<PathPermission>
. Isso significa que a coleção não é mais observável como as coleções regulares apoiadas pelo Realm. Se você precisar ser notificado sobre alterações nessa coleção, precisará implementar um mecanismo baseado em pesquisa. PathPermission.MayRead/MayWrite/MayManage
foram preteridas a favor de uma APIAccessLevel
mais consistente.- Em
User.ApplyPermissionsAsync
, renomeou o parâmetrorealmUrl
pararealmPath
. - Em
User.OfferPermissionsAsync
, renomeou o parâmetrorealmUrl
pararealmPath
. - Removidas as classes
PermissionOfferResponse
ePermissionChange
. - Foi removida a interface
IPermissionObject
. - Foi removido o enumeração
ManagementObjectStatus
. - Removidos os métodos
User.GetPermissionChanges
eUser.GetPermissionOfferResponses
. - O argumento
millisecondTimeout
emUser.GetGrantedPermissionsAsync
foi removido. - A classe
PermissionException
foi substituída porHttpException
.
- Alterado o tipo de retorno de
- A classe
AuthenticationException
foi incorporada na classeHttpException
.
Melhorias
Foram adicionados métodos
Session.Start()
eSession.Stop()
que permitem pausar/retomar a sincronização com o servidor de objetos de Realm . (Edição #138)Foi adicionado um método de extensão
IQueryable<T>.Subscribe(SubscriptionOptions, params Expression<Func<T, IQueryable>>[] includedBacklinks)
que permite configurar opções adicionais para a assinatura, como nome, tempo de vida e se uma assinatura existente deve ser atualizada. O argumentoincludedBacklinks
permite especificar quais propriedades de backlink devem ser incluídas no fechamento transitivo ao fazer a sincronização baseada em query. Por exemplo:class Dog : RealmObject { public Person Owner { get; set; } } class Person : RealmObject { [Backlink(nameof(Dog.Owner))] public IQueryable<Dog> Dogs { get; } } var options = new SubscriptionOptions { Name = "adults", TimeToLive = TimeSpan.FromDays(1), ShouldUpdate = true }; var people = realm.All<Person>() .Where(p => p.Age > 18) .Subscribe(options, p => p.Dogs); await people.WaitForSynchronzationAsync(); // Dogs that have an owner set to a person that is over 18 // will now be included in the objects synchronized locally. var firstPersonDogs = people.Results.First().Dogs;
Foi adicionado um método de extensão
Realm.GetAllSubscriptions()
que permite obter uma coleção de todas as assinaturas registradas de sincronização baseada em query. (Edição #1838)Propriedade
AccessLevel
adicionada aPathPermission
para substituir oMayRead/MayWrite/MayManage
agora obsoleto. (Edição #1863)Propriedade
RealmOwnerId
adicionada aPathPermission
que indica quem é o proprietário do Realm. (Edição #1863)Adicionado suporte para construir com
dotnet build
(anteriormente apenas a linha de comandomsbuild
era suportada). (PR #1849)Desempenho de query aprimorado para colunas de string não indexadas quando a query tem uma longa cadeia de condições OR. (Atualização de núcleo)
Melhorou significativamente o desempenho de criptografia e descriptografia usando funções de criptografia otimizadas para hardware. (Atualização de núcleo)
A compactação de um domínio em um arquivo criptografado pode levar muito tempo. O processo agora está otimizado ajustando o tamanho do buffer de gravação em relação ao espaço usado no domínio. (Atualização de núcleo)
O analisador de query baseado em string (
results.Filter("...")
) agora suporta carimbos de data/hora legíveis com um separador 'T' além do separador "@" originalmente suportado. Por exemplo:startDate > 1981-11-01T23:59:59:1
(atualização de núcleo)
Corrigido
- Corrige um problema em que o uso do método de extensão
StringExtensions.Contains(string, string, StringComparison)
em uma query LINQ resultaria em uma exceção sendo lançada no .NET Core 2.1+ ou Xamarin.iOS/Android projetos.(Edição #1848) - Criar um objeto após criar um objeto com a chave primária int de "nulo" atingiria uma falha de afirmação. (Atualização de núcleo)
Compatibilidade
- Servidor de objetos de Realm : 3.23.1 ou posterior.
Interno
- Sincronização atualizada de 3.14.11 para 4.5.1 e Core 5.12.7 para 5.20.0.
3.4.0 (2019-01-09)
OBSERVAÇÃO! Você precisará atualizar seu servidor Realm Object MongoDB para pelo menos a versão 3.11.0 ou usar o Realm Cloud. Se você tentar se conectar a um ROS v3.10.x ou anterior, verá um erro como Wrong protocol version in Sync HTTP request, client protocol version = 25, server protocol version = 24
.
Melhorias
- O progresso do download agora é relatado ao servidor, mesmo quando não há alterações locais. Isso permite que o servidor faça a compactação do histórico de forma muito mais agressiva, especialmente quando há muitos clientes que raramente ou nunca fazem alterações locais. (#1772)
- Reduza o uso de memória ao integrar alterações sincronizadas enviadas pelo ROS.
- Capacidade adicionada de fornecer uma função de registro personalizada para lidar com registros emitidos por sincronização especificando
SyncConfigurationBase.CustomLogger
. Deve ser definido antes de abrir um Realm sincronizado . (#1824) - Os clientes que usam o protocolo 25 agora relatam o progresso do download no servidor, mesmo quando não fazem alterações locais. Isso permite que o servidor faça a compactação do histórico de forma muito mais agressiva, especialmente quando há muitos clientes que raramente ou nunca fazem alterações locais. (#1772)
- Adicione um cabeçalho User-Agent às solicitações HTTP feitas ao servidor Realm Object MongoDB. Por padrão, contém informações sobre a versão da biblioteca Realm e a plataforma .NET. Detalhes adicionais podem ser fornecidos (como o nome/versão do aplicativo) configurando o
SyncConfigurationBase.UserAgent
antes de abrir um Realm sincronizado. Se estiver desenvolvendo um aplicativo Xamarin, você pode usar o plug-in Xamarin.Essentials para automatizar isso:SyncConfiguration.UserAgent = $"{AppInfo.Name} ({AppInfo.PackageName} {AppInfo.VersionString})"
.
Corrigido
- Corrigido um bug que poderia causar falhas com uma mensagem como
Assertion failed: ndx < size() with (ndx, size()) = [742, 742]
. - Correção de um bug que resultava no envio de um
LogLevel
incorreto para o Sync ao definirSyncConfigurationBase.LogLevel
. (#1824, desde 2.2.0) - Corrigiu um erro que impedia o
Realm.GetInstanceAsync
de funcionar quando utilizado comQueryBasedSyncConfiguration
. (#1827, desde 3.1.0)
Mudanças de última hora
- O método obsoleto
realm.SubscribeToObjectsAsync
foi removido nesta versão. (#1772) User.ConfigurePersistence
foi preterido em favor deSyncConfigurationBase.Initialize
.
Compatibilidade
- Servidor de objetos de Realm : 3.11.0 ou posterior. A versão do protocolo de sincronização foi atualizada para a versão 25. O servidor é compatível com versões anteriores com clientes que usam a versão 24 do protocolo ou inferior, mas os clientes na versão 25 não são compatíveis com versões anteriores de um servidor na versão 24 do protocolo . O servidor deve ser atualizado antes que qualquer cliente seja atualizado.
Interno
- Sincronização atualizada de 3.9.2 para 3.14.11 e Core de 5.8.0 para 5.12.7.
3.3.0 (2018-11-08)
Melhorias
- Expôs uma propriedade
OnProgress
emSyncConfigurationBase
. Permite que você especifique uma chamada de resposta de resposta de progresso que será invocada ao utilizar oRealm.GetInstanceAsync
para relatar o progresso do download. (#1807)
Corrigido
- Tentar chamar
Subscription.WaitForSynchronizationAsync
em um thread em background (sem umSynchronizationContext
) anteriormente travava indefinidamente. Agora, uma exceção significativa será lançada para indicar que isso não é suportado e que esse método deve ser chamado em um thread com um contexto de sincronização. (dotnet-private#130, desde v3.0.0)
Compatibilidade
- Servidor de objetos de Realm : 3.0.0 ou posterior.
- As APIs são compatíveis com todas as versões anteriores da série 3.xy.
- Formato de arquivo: Gera Realms com formato v9 (Lê e atualiza todos os formatos anteriores)
3.2.1 (2018-09-27)
Correções de Bugs
- Corrigido um bug que normalmente resultaria em exceções com uma mensagem como
An unknown error has occurred. State: *some-number-larger than 127*
ao assinar queries. (dotnet-private#128, desde3.0.0
)
3.2.0 (2018-08-04)
Melhorias
RealmObject
os sucessores agora criarãoPropertyChanged
depois de serem removidos do Realm. O nome da propriedade nos argumentos do evento seráIsValid
.- Agrupe algumas autoridades de certificação comuns no Linux para que a conexão com instâncias do ROS por SSL deve funcionar imediatamente para a maioria dos certificados. Em especial, agora ele funcionará imediatamente para instâncias do Realm Cloud.
Correções de Bugs
- Ao construir queries que comparam um RealmObject inválido/não gerenciado (por exemplo
realm.All<Foo>().Where(f => f.Bar == someBar)
), uma exceção significativa agora será lançada em vez de uma ArgumentNullException oculta. - Adicionado
ShouldCompactOnLaunch
à versão PCL da biblioteca. (dotnet-private#125)
3.1.0 (2018-07-04)
Melhorias
- Expõe uma coleção
ChangeSet.NewModifiedIndices
que contém informações sobre os índices dos objetos que foram alterados na nova versão da coleção (ou seja, após contabilizar as inserções e exclusões). - Atualizar o Fody para 3.0.
Correções de Bugs
WriteAsync
não executará mais umRefresh
síncrono na thread principal. (#1729)- Tentar adicionar um objeto de Realm gerenciado a uma instância diferente do mesmo Realm em disco não lançará mais uma exceção.
- Foi removida a conformidade com
IList
para coleções de Realm . Isso corrige um problema que faria com que o aplicativo travasse no Android ao desmarcar um item de um ListView vinculado a uma collection do Realm .
Mudanças de última hora
SyncConfiguration
agora está obsoleto e será removido em uma versão futura. Duas novas classes de configuração foram expostas - QueryBasedSyncConfiguration e FullSyncConfiguration. Se você estava usando umSyncConfiguration
comIsPartial = true
, altere seu código para usarQueryBasedSyncConfiguration
. Da mesma forma, seIsPartial
não foi definido ou foi definido comofalse
, useFullSyncConfiguration
.- Foi removida a conformidade com
IList
para coleções de Realm . Isso impedirá as atualizações automáticas do limite de dados do ListViews para as coleções do Realm em projetos da UWP.
3.0.0 (2018-04-16)
Melhorias
- Permita que
[MapTo]
seja aplicado em classes para alterar o nome da tabela correspondente a esta classe. (#1712) - Foi adicionada uma API aprimorada para adicionar assinaturas em Realms parcialmente sincronizados.
IQueryable<T>.Subscribe
pode ser usado para assinar qualquer query, e o objetoSubscription<T>
retornado pode ser usado para observar o estado da assinatura e, por fim, removê-la. Consulte a documentação para obter mais informações. (#1679) - Foi adicionado um sistema de permissões refinado para uso com Realms parcialmente sincronizados. Isso permite que as permissões sejam definidas no nível de objetos individuais ou classes. Consulte a documentação para obter mais informações. (#1714)
- Exposto a um método
IQueryable<T>.Filter(predicate)
baseado em string para permitir cenários de query mais avançados, como:- Seguindo links:
realm.All<Dog>().Filter("Owner.FirstName BEGINSWITH 'J'")
. - Queries sobre collections:
realm.All<Child>().Filter("Parents.FirstName BEGINSWITH 'J'")
- encontre todas as crianças que têm um pai cujo nome começa com J ourealm.All<Child>().Filter("Parents.@avg.Age > 50")
- encontre todas as crianças cuja idade média dos pais é superior a 50. - Subqueries:
realm.All<Person>().Filter("SUBQUERY(Dogs, $dog, $dog.Vaccinated == false).@count > 3")
- encontre todas as pessoas que têm mais de 3 cães não imunizados. - Classificação:
realm.All<Dog>().Filter("TRUEPREDICATE SORT(Owner.FirstName ASC, Age DESC)")
- encontre todos os cães e classifique-os pelo nome do proprietário em ordem crescente e, em seguida, pela idade do cão em ordem decrescente. - Distinct:
realm.All<Dog>().Filter("TRUEPREDICATE DISTINCT(Age) SORT(Name)")
- encontre todos os cães, classifique-os por seu nome e escolha um cão para cada valor de idade. - Para obter mais exemplos, consulte os Docsde referência da linguagem de query ou a Folha de referências do NSPredicate.
- Seguindo links:
- O construtor do
SyncConfiguration
agora aceita URL relativo. (#1720) - Foram adicionados os seguintes métodos para redefinir a senha do usuário e confirmar seu e-mail:
RequestPasswordResetAsync
,CompletePasswordResetAsync
,RequestEmailConfirmationAsync
eConfirmEmailAsync
. Todos eles se aplicam apenas a usuários criados por meioCredentials.UsernamePassword
que forneceram seu e-mail como o nome de usuário. (#1721)
Correções de Bugs
- Corrigido um bug que poderia causar impasses em dispositivos Android ao resolver referências seguras de thread. (#1708)
Mudanças de última hora
- Usa o cliente Sync 3.0 que é incompatível com o ROS 2.x.
Permission
foi renomeado paraPathPermission
para refletir mais de perto seu propósito. Além disso, os métodos existentes para modificar permissões funcionam apenas em Realms completos. Novos métodos e classes são introduzidos para configurar o acesso a um Realm parcialmente sincronizado.- O tipo de
RealmConfiguration.DefaultConfiguration
foi alterado paraRealmConfigurationBase
para permitir que qualquer subclasse seja definida como padrão. (#1720) - Os argumentos do construtor do
SyncConfiguration
agora são opcionais. O valoruser
será padronizado para o usuário conectado no momento e o valorserverUri
será padronizado pararealm://MY-SERVER-URL/default
, ondeMY-SERVER-URL
é o host com o qual o usuário autenticou. (#1720) - O argumento
serverUrl
emUser.LoginAsync(credentials, serverUrl)
eUser.GetLoggedInUser(identity, serverUrl)
foi renomeado paraserverUri
por consistência. (#1721)
2.2.0 (2017-03-22)
Melhorias
- Foi adicionada uma propriedade
IsDynamic
aRealmConfigurationBase
, permitindo que você abra um arquivo Realm e leia seu esquema do disco. (#1637) - Foi adicionada uma nova classe
InMemoryConfiguration
que permite criar uma Instância de Realm na memória. (#1638) - Permitir definir diretamente os elementos de uma lista - por exemplo
foo.Bars[2] = new Bar()
oufoo.Integers[3] = 5
. (#1641) - Adição de fornecedor de credenciais de JSON web token (JSON web token). (#1655)
- Adicionados fornecedores de credenciais de anônimo e apelido. (#1671)
Correções de Bugs
- Corrigido um problema em que a notificação inicial de alteração da coleção não era entregue a todos os assinantes. (#1696)
- Corrigido um caso de canto em que
RealmObject.Equals
retornariatrue
para objetos que não são mais gerenciados pelo Realm. (#1698)
Mudanças de última hora
SyncConfiguration.SetFeatureToken
está obsoleto e não é mais necessário para usar a sincronização no Linux ou os recursos do lado do servidor. (#1703)
2.1.0 (2017-11-13)
Melhorias
- Foi adicionado um atributo
[Explicit]
que pode ser aplicado a classes ou assembléias. Se uma classe for coberta com ele, ela não será incluída no esquema padrão do Realm (ou seja, você precisa definir explicitamenteRealmConfiguration.ObjectClasses
para uma array que contenha essa classe). Da mesma forma, se for aplicado a uma montagem, todas as classes nessa montagem serão consideradas explícitas. Isso é útil ao desenvolver uma biblioteca de terceiros 3que depende do Realm para evitar que suas classes internas vazem para o esquema do usuário. (#1602)
Correções de Bugs
- Corrigido um bug que impedia a escrita de queries que verificavam se um objeto relacionado é nulo, por exemplo
realm.All<Dog>().Where(d => d.Owner == null)
. (#1601) - Foi resolvido um problema que faria com que o depurador relatasse uma exceção não observada sendo lançada quando "Apenas meu código" está desativado. (#1603)
- Chamar
Realm.DeleteRealm
em um Realm sincronizado agora excluirá corretamente a pastarealm.management
. (#1621) - Corrigiu uma falha ao acessar propriedades de lista primitiva em objetos em domínios abertos com um esquema dinâmico (por exemplo, em migrações). (#1629)
2.0.0 (2017-10-17)
Melhorias
- Adicionado suporte para collections de valores primitivos. Agora você pode definir propriedades como
IList<T>
, em queT
pode ser qualquer tipo suportado pelo Realm, exceto outroIList
. Como resultado, muitos métodos que anteriormente tinham restrições emRealmObject
agora aceitam qualquer tipo e podem lançar uma exceção de tempo de execução se usados com um argumento de tipo não suportado. (#1517) - Adicionado
HelpLink
apontando para a seção relevante da documentação para a maioria das exceções do Realm. (#1521) - API
RealmObject.GetBacklinks
adicionada para obter dinamicamente todos os objetos com referência ao atual. (#1533) - Foi adicionado um novo tipo de exceção,
PermissionDeniedException
, para denotar erros de permissão negada ao trabalhar com Realms sincronizados que expõe um método -DeleteRealmUserInfo
- para informar à associação que os arquivos do Realm ofensor devem ser mantidos ou excluídos imediatamente. Isso permite em recuperação de erros de permissão negada de maneira mais robusta. (#1543) - O nome do serviço de chaves usado pelo Realm para gerenciar as chaves de encriptação de metadados relacionados à sincronização em plataformas da Apple agora está definido como o identificador de pacote. As chaves que foram armazenadas anteriormente no serviço de chaves específico do Realm serão migradas de forma transparente para o serviço de chaves por aplicativo. (#1522)
- Adicionado um novo tipo de exceção -
IncompatibleSyncedFileException
- que permite lidar e executar a migração de dados de um legado (1.x) Arquivo de Realm para o novo .x do 2 formato. Ele pode ser lançado ao usarRealm.GetInstance
ouRealm.GetInstanceAsync
e expõe um métodoGetBackupRealmConfig
que permite abrir o Arquivo de Realm antigo em um modo dinâmico e migrar todos os dados necessários. (#1552) - Ative a criptografia no Windows. (#1570)
- Ative a compactação Realm no Windows. (#1571)
UserInfo
foi significativamente aprimorado. Agora ele contém metadados sobre um usuário armazenado no Servidor de Objeto de Realm , bem como uma lista de todos os dados da conta de usuário associados a esse usuário. (#1573)- Introduziu um novo método -
User.LogOutAsync
para substituir a chamada síncrona agora obsoleta. (#1574) - propriedade
BacklinksCount
exposta emRealmObject
que retorna o número de objetos que se referem ao objeto atual por meio de uma relacionamento para-um ou para-muitos. (#1578) - As chaves primárias de string agora suportam
null
como um valor. (#1579) - Adicione suporte de visualização para sincronização parcial. A sincronização parcial permite que um Realm sincronizado seja aberto de forma que somente os objetos solicitados pelo usuário sejam sincronizados com o dispositivo. Você pode usar definindo a propriedade
IsPartial
em umSyncConfiguration
, abrindo o Realm e, em seguida, chamandoRealm.SubscribeToObjectsAsync
com o tipo de objeto em que você está interessado, uma string de caracteres contendo uma consulta que determina quais objetos você deseja assinar para e um chamada de resposta de chamada que relatará os resultados. Você pode adicionar quantas assinaturas forem necessárias a um Realm sincronizado. (#1580) - Certifique-se de que as collections de Realm (
IList<T>
,IQueryable<T>
) não sejam alteradas ao iterar em um loopforeach
. (#1589)
Correções de Bugs
Realm.GetInstance
agora avançará o Realm para a versão mais recente, para que você não precise mais chamarRefresh
manualmente depois disso. (#1523)- Foi corrigido um problema que impedia o funcionamento dos projetos de extensão de compartilhamento do iOS. (#1535)
Mudanças de última hora
Realm.CreateObject(string className)
agora tem parâmetro adicionalobject primaryKey
. Você deve passar isso ao criar um novo objeto usando a API dinâmica. Se o objeto que você está criando não tiver uma chave primária declarada, passenull
. (#1381)AcceptPermissionOfferAsync
agora retorna o URL relativo em vez do absoluto do Realm para o qual o usuário recebeu permissões. (#1595)
1.6.0 (2017-08-14)
Melhorias
- API
Realm.WriteCopy
exposta para copiar um Arquivo de Realm e, opcionalmente, criptografá-lo com uma chave diferente. (#1464) - As representações de tempo de execução de todas as collections do Realm (
IQueryable<T>
eIList<T>
) agora implementam a interfaceIList
necessária para vincular dados aoListView
em aplicativos UWP. (#1469) - API
User.RetrieveInfoForUserAsync
exposta para permitir que os usuários administradores pesquisem identidades de outros usuários no servidor MongoDB do Realm Object. Isso pode ser usado, por exemplo, para encontrar um usuário conhecendo seu ID do Facebook. (#1486) - Foi adicionada uma verificação para verificar se não há nomes de objeto duplicados ao criar o esquema. (#1502)
- Foram adicionadas mensagens de erro mais abrangentes ao passar um esquema de URL inválido para
SyncConfiguration
ouUser.LoginAsync
. (#1501) - Foram adicionadas informações de erro mais significativas às exceções lançadas por
Realm.GetInstanceAsync
. (#1503) - Foi adicionado um novo tipo -
RealmInteger<T>
para expor a API específica do Realm sobre os tipos integrais de base. Ele pode ser usado para implementar a funcionalidade de contador em domínios sincronizados. (#1466) - Adicionado
PermissionCondition.Default
para aplicar permissões padrão para usuários existentes e novos. (#1511)
Correções de Bugs
- Corrija uma exceção sendo lançada ao comparar o valor de caractere não constante em uma consulta. (#1471)
- Corrige uma exceção sendo lançada ao comparar bytes não constantes ou valor curto em uma query. (#1472)
- Corrigir um bug em que, ao chamar a versão não genérica de
IQueryProvider.CreateQuery
nos resultados de IQueryable do Realm, uma exceção seria lançada. (#1487) - A tentativa de usar uma propriedade
IList
ouIQueryable
em uma query LINQ agora geraráNotSupportedException
em vez de travar o aplicativo. (#1505)
Mudanças de última hora
1.5.0 (2017-06-20)
Melhorias
- Nova API exposta na classe
User
para trabalhar com permissões: (#1361)ApplyPermissionsAsync
,OfferPermissionsAsync
eAcceptPermissionOfferAsync
permitem conceder, revogar, oferecer e aceitar permissões.GetPermissionOffers
,GetPermissionOfferResponses
eGetPermissionChanges
permitem revisar objetos adicionados por meio dos métodos mencionados acima.GetGrantedPermissionsAsync
permite inspecionar permissões concedidas a ou pelo usuário atual.
- Quando usado com
RealmConfiguration
(ou seja Realm local),Realm.GetInstanceAsync
executará uma operação potencialmente cara, como executar migrações ou compactação em um thread de background. (#1406) - Exponha a API
User.ChangePasswordAsync(userId, password)
para permitir que os usuários administradores alterem as senhas de outros usuários. (#1412) - Exponha a API
SyncConfiguration.TrustedCAPath
para fornecer uma CA personalizada que será usada para validar o tráfego SSL para o servidor MongoDB de objetos de Realm . (#1423) - Exponha a API
Realm.IsInTransaction
para verificar se há uma transação ativa para esse Realm. (#1452)
Correções de Bugs
- Correção de uma falha ao executar query de propriedades que tenham
[MapTo]
aplicado. (#1405) - Correção de um problema em que os Realms sincronizados não se conectavam ao servidor remoto em determinadas situações, como quando um aplicativo estava offline quando os Realms foram abertos, mas depois recuperaram a conectividade de rede. (#1407)
- Correção de um problema em que o nome de propriedade incorreto será passado para
RealmObject.PropertyChanged
assinantes quando a propriedade real alterada estiver abaixo de uma propriedadeBacklink
. (#1433) - Corrige uma exceção lançada ao fazer referência ao Realm em uma montagem de teste PCL sem realmente usá-lo. (#1434)
- Corrigir um erro quando
SyncConfiguration.EnableSSLValidation
seria ignorado quando passado paraRealm.GetInstanceAsync
. (#1423)
Mudanças de última hora
- Os construtores de
PermissionChange
,PermissionOffer
ePermissionOfferResponse
agora são privados. Use a nova APIUser.ApplyPermissionsAsync
,User.OfferPermissionsAsync
eUser.AcceptPermissionOfferAsync
. (#1361) User.GetManagementRealm
eUser.GetPermissionRealm
estão agora obsoletos. Use a nova API relacionada a permissões emUser
para obter os mesmos resultados. (#1361)User.ChangePassword(password)
foi renomeado paraUser.ChangePasswordAsync(password)
. (#1412)- Foi removida a seguinte API obsoleta: (#1425)
Realm.ObjectForPrimaryKey<T>(long id)
Realm.ObjectForPrimaryKey<T>(string id)
Realm.ObjectForPrimaryKey(string className, long id)
Realm.ObjectForPrimaryKey(string className, string id)
Realm.Manage<T>(T obj, bool update)
Realm.Close()
Realm.CreateObject<T>()
IOrderedQueryable<T>.ToNotifyCollectionChanged<T>(Action<Exception> errorCallback)
IOrderedQueryable<T>.ToNotifyCollectionChanged<T>(Action<Exception> errorCallback, bool coalesceMultipleChangesIntoReset)
IRealmCollection<T>.ObjectSchema
Realm.DeleteRealm
agora lança uma exceção se for chamado enquanto uma instância desse Realm ainda estiver aberta.
1.4.0 (2017-05-19)
Melhorias
- Exponha o método virtual
RealmObject.OnManaged
que pode ser usado para fins de inicialização, pois o construtor é executado antes que o objeto tenha conhecimento de seu Realm. (#1383) - Exponha a API
Realm.GetInstanceAsync
para abrir de forma assíncrona um Realm sincronizado. Ele baixará todo o conteúdo remoto disponível no momento em que a operação começou em um thread em segundo plano e, em seguida, retornará um Realm utilizável. É também a única maneira suportada de abrir Realms para o qual o usuário tem apenas permissões de leitura.
1.3.0 (2017-05-16)
Plataforma Universal Windows
Apresentando o Realm Mobile Database para a Plataforma Universal do Windows (UWP). Com o suporte da UWP, agora você pode criar aplicativos móveis usando o banco de banco de dados de objeto do Realm para milhões de dispositivos móveis, PC e xbox com Windows 10. A adição do suporte a UWP permite que os desenvolvedores .NET criem aplicativos para praticamente qualquer plataforma Windows moderna com Windows Desktop (Win32) ou UWP, bem como para iOS e Android via Xamarin. Observe que o suporte de sincronização ainda não está disponível para a UWP, embora estejamos trabalhando nisso e você possa esperá-lo em breve.
Melhorias
- Queries que não diferenciam maiúsculas de minúsculas em uma propriedade de string agora usam um novo Atlas Search baseado em índice . (#1380)
- Adicione
User.ChangePassword
API para alterar a senha do usuário atual se estiver usando o provedor de autenticação "senha" do Realm. Requer qualquer edição do Realm Object MongoDB Server 1.4.0 ou posterior. (#1386) SyncConfiguration
agora tem uma propriedadeEnableSSLValidation
(o padrão étrue
) para permitir que a validação SSL seja especificada por servidor. (#1387)- Adicione a propriedade de chamada de resposta
RealmConfiguration.ShouldCompactOnLaunch
ao configurar um Realm para determinar se ele deve ser compactado antes de ser retornado. (#1389) - Ocule alguns avisos de vinculador benigno no iOS. (#1263)
- Use a API de acessibilidade para minimizar o atraso da reconexão se a conexão de rede for perdida. (#1380)
Correções de Bugs
- Corrigido um bug em que
Session.Reconnect
não reconectava todas as sessões. (#1380) - Corrigiu uma falha ao assinar
PropertyChanged
várias vezes. (#1380) - Corrigiu uma falha ao reconectar ao servidor Object MongoDB (#1380)
- Corrigiu uma falha em alguns dispositivos Android 7.x ao abrir um Realm (#1380)
1.2.1 (2017-05-01)
Correções de Bugs
- Correção de um problema em que
EntryPointNotFoundException
era lançado em alguns dispositivos Android. (#1336)
Melhorias
- Exponha
IRealmCollection.IsValid
para indicar se a coleção de domínio é válida para uso. (#1344) - Atualize a referência Fody que adiciona suporte para construir com Mono 5. (#1364)
1.2.0 (2017-04-04)
O Realm agora está sendo distribuído como uma biblioteca .NET Standard 1.4 , pois esse é um requisito para oferecer suporte à UWP. Embora internamente seja uma mudança bastante grande, os aplicativos que a utilizam não devem ser afetados. Após a atualização, você verá uma série de novas dependências do NuGet sendo adicionadas – essas são conjuntos de referência, já fazem parte do mscorlib, portanto, não afetarão o tamanho ou o desempenho do seu aplicativo. Além disso, estamos lançando um novo pacote DataBinding específico da plataforma que contém métodos assistente que permitem cenários de vinculação de dados bidirecionais ao criar automaticamente transações ao definir uma propriedade.
Se você encontrar algum problema após a atualização, recomendamos limpar as pastas bin
e obj
e reiniciar o Xamarin Studio. Se isso não ajudar, registre um problema explicando a configuração da solução e o tipo de problema que você encontra.
Os arquivos escritos com esta versão não podem ser lidos por versões anteriores do Realm. Esta versão não é compatível com versões do Servidor Realm Object MongoDB inferiores a 1.3.0.
Correções de Bugs
- Corrige a sobrecarga do
RemoveAll(string)
para funcionar corretamente. (#1288) - Foi resolvido um problema que causava falhas ao atualizar o token para uma sessão inválida. (#1289)
- O
IObservable
retornado desession.GetProgressObservable
chamará corretamenteOnComplete
quando criado commode: ProgressMode.ForCurrentlyOutstandingWork
. (#1292) - Corrigido um vazamento de memória ao acessar as propriedades da string. (#1318)
- Corrige um problema ao utilizar o
EncryptionKey
com domínios sincronizados. (#1322)
Melhorias
- Introduza APIs para passar objetos com segurança entre threads. Crie uma referência segura de thread para um objeto confinado à thread passando para o método de fábrica
ThreadSafeReference.Create
, que você pode então passar com segurança para outra thread para resolver no novo realm comRealm.ResolveReference
. (#1300) - Apresentar API para tentar reconectar todas as sessões. Isso pode ser usado em conjunto com o plug-in de conectividade para monitorar as alterações de conectividade e solicitar a reconexão de forma proativa, em vez de confiar no mecanismo de repetição integrado. (#1310)
- Habilita a classificação de relacionamentos um-para-um, por exemplo
realm.All<Parent>().OrderBy(p => p.Child.Age)
. (#1313) - Introduzir um método de extensão
string.Like
que pode ser usado em queries LINQ no mecanismo de banco de dados de dados subjacente. (#1311) - Adicione uma propriedade
User.IsAdmin
que indica se um usuário é um administrador do Realm Object MongoDB Server. (#1320)
Mudanças de última hora
DateTimeOffset
As propriedades que não estão definidas agora serão padronizadas corretamente0001-1-1
em vez de1970-1-1
depois que o objeto for passado pararealm.Add
. (#1293)- A tentativa de obter um item no índice que esteja fora do intervalo agora deve lançar corretamente
ArgumentOutOfRangeException
para todas as implementaçõesIRealmCollection
. (#1295) - O layout do arquivo .lock o arquivo foi alterado, o que pode afetar cenários em que diferentes processos tentam escrever no mesmo arquivo do Realm ao mesmo tempo. (#1296)
PropertyChanged
as notificações usam um mecanismo novo e mais confiável, que se comporta de forma um pouco diferente do antigo. As notificações serão enviadas somente após a confirmação de uma transação (tornando-a consistente com a forma como as notificações de cobrança são tratadas). Para garantir que sua interface do usuário seja atualizada imediatamente, você deve evitar manter transações de longa duração por perto. (#1316)
1.1.1 (2017-03-15)
Correções de Bugs
- Resolvido um problema que impedia a compilação para iOS no Visual Studio. (#1277)
1.1.0 (2017-03-03)
Melhorias
- Fornecedor de credenciais do Azure Active Directory (AzureAD) adicionado. (#1254)
Mudanças de última hora
Esta é uma versão de preparação para adicionar suporte UWP. Removemos toda a lógica específica da plataforma dos conjuntos do Realm e, em vez disso, os definimos em tempo de compilação. Embora isso tenha sido testado em todos os cenários comuns, ele pode criar problemas com gráficos de projeto muito complexos. Se você encontrar algum desses problemas com projetos para iOS:
- A compilação falha ao executar a tarefa
WeaveRealmAssemblies
- A aplicação falha ao acessar um Realm pela primeira vez
registre um problema e explique a configuração da solução.
1.0.4 (2017-02-21)
Correções de Bugs
- O pacote
Realm
NuGet não abre mais o caminho para binários nativos do Windows32 noRealm.Database
. (#1239) - Corrigido um bug em que a coleta de lixo de um objeto com
PropertyChanged
assinantes causaria falhas. (#1237)
1.0.3 (2017-02-14)
Fora da versão beta!
Após cerca de um ano e meio de trabalho árduo, temos o privilégio de chamar esta versão de 1.0 . Ainda há trabalho a ser feito, mas o Realm Xamarin agora está sendo usado por milhares de desenvolvedores e tem se mostrado confiável.
sincronizar
O Realm Xamarin agora funciona com a Realm Mobile Platform. Isso significa que você pode escrever aplicativos Xamarin que são sincronizados perfeitamente com um servidor de objetos de Realm , o que lhe permite escrever aplicativos complexos com o Xamarin que são offline-first e são sincronizados automaticamente com a adição de apenas algumas linhas de código. Você pode ler sobre isso na documentação.
Desktop Windows
O Realm Xamarin não é mais apenas para iOS e Android. Agora você pode usá-lo para escrever programas .NET para o desktop do Windows. Adicione o pacote NuGet ao seu projeto .NET regular e comece a usar o Realm. Alguns recursos ainda não são suportados no Windows. Em especial, a sincronização ainda não funciona para o Windows, mas também estão faltando criptografia e notificações entre processos. Estamos trabalhando nisso e você pode esperar suporte em breve.
Mudanças de última hora
IRealmCollection<T>.ObjectSchema
está obsoleto e substituído porISchemaSource.ObjectSchema
. (#1216)
Correções de Bugs
[MapTo]
atributo agora é respeitado nas queries. (#1219)- Permitir que uma instância do Realm seja coletada no lixo em vez de descartá-la não causará mais falhas. (#1212)
- O cancelamento da assinatura de
RealmObject.PropertyChanged
em um chamada de resposta de respostaPropertyChanged
não deve mais causar falhas. (#1207) WriteAsync
agora avança a transação de leitura para que as alterações feitas de forma assíncrona estejam disponíveis imediatamente na thread original. (#1192)- As queries sobre propriedades de backlink não devem mais produzir resultados inesperados. (#1177)
0.82.1 (2017-01-27)
Correções de Bugs
- Foi resolvido um problema em que a obtenção de uma Instância de Realm, a leitura de um objeto e a obtenção de outra instância na mesma thread fariam com que o objeto se tornasse inválido e travasse o aplicação ao acessar qualquer um de seus membros.
0.82.0 (2017-01-23)
Mudanças de última hora
- Todas as exceções foram movidas no namespace
Realms.Exceptions
. (#1075) - namespace
RealmSchema
movido paraRealms.Schema
. (#1075) - Torna o construtor
ErrorEventArgs
interno. (#1075) - Tornado
ObjectSchema.Builder
eRealmSchema.Builder
interno. (#1075) - Passar um objeto que tenha propriedades
IList
paraAdd(obj, update: true)
não mesclará mais as listas. Em vez disso, a propriedadeIList
conterá somente os itens no objeto. (#1040)
Melhorias
- Foi adicionado um método
OnPropertyChanged
virtual emRealmObject
que você pode substituir para ser notificado sobre alterações no objeto atual. (#1047) - Adicionadas verificações de tempo de compilação se
[Required]
está aplicado nos tipos de propriedade corretos. (#1072) Realm.Add(RealmObject obj)
agora retornará o objeto passado, semelhante aRealm.Add<T>(T obj)
. (#1162)- Foi adicionado um método de extensão para
string.Contains
que aceita o argumentoStringComparison
e pode ser usado em queries. Ao consultar, somenteStringComparison.Ordinal
eStringComparison.OrdinalIgnoreCase
podem ser usados. Quando não utilizados em queries, todos os valores paraStringComparison
são válidos. (#1141)
Correções de Bugs
- Adicionar um objeto autônomo , que tenha uma propriedade
IList<T>
que nunca foi acessada, ao Realm não lançará mais umNullReferenceException
. (#1040) IList<T>
as propriedades agora retornarão corretamenteIsReadOnly = true
quando gerenciadas por um Realm somente leitura . (#1070)- O tecelão agora deve resolver corretamente as referências em assemblies PCL e netstandard. (#1117)
- Adicione alguns métodos ausentes ao conjunto de referência PCL. (#1093)
- Os domínios descartados não lançarão
ObjectDisposedException
ao tentar acessar seus membros. Além disso, descartar um realm não invalidará outras instâncias na mesma thread. (#1063)
0.81.0 (2016-12-14)
Mudanças de última hora
- Os métodos de extensão
IQueryable<T>.ToNotifyCollectionChanged
que aceitam parâmetros agora estão obsoletos. Há um novo sem parâmetro que você deve usar. Se você deseja gerenciar erros, pode fazê-lo assinando o eventoRealm.OnError
. (#938) RealmResults<T>
agora está marcado comointernal
eRealm.All<T>()
retornaráIQueryable<T>
. Adicionamos um novo método de extensãoIQueryable<T>.SubscribeForNotifications(NotificationCallbackDelegate<T>)
que permite assinar notificações. (#942)Realm.CreateObject<T>
foi descontinuado e será removido na próxima versão principal. (Isto pode causar uma perda de dados perigosa ao utilizar os domínios sincronizados em breve, se uma classe tiver uma PrimaryKey). (#998)RealmConfiguration.ReadOnly
foi renomeado paraRealmConfiguration.IsReadOnly
e agora é uma propriedade em vez de um campo. (#858)Realm.All
foi renomeado paraRealm.GetAll
e o primeiro ficou obsoleto. (#858)Realm.ObjectForPrimaryKey
foi renomeado paraRealm.Find
e o primeiro ficou obsoleto. (#858)Realm.Manage
foi renomeado paraRealm.Add
e o primeiro ficou obsoleto. (#858)RealmConfiguration.PathToRealm
foi renomeado paraRealm.GetPathToRealm
e o primeiro ficou obsoleto. (#858)RealmResults.NotificationCallback
foi extraído como uma classe não aninhada e foi renomeado paraNotificationCallbackDelegate
. (#858)Realm.Close
foi removido a favor deRealm.Dispose
. (#858)RealmList<T>
agora está marcado comointernal
. Você deve usarIList<T>
para definir relacionamentos de coleção. (#858)
Melhorias
- Em cenários de vinculação de dados, se um setter for invocado pela vinculação fora da transação de gravação, criaremos um implícito e o confirmaremos. Isso permite ligações de dados bidirecionais sem manter transações de longa duração. (#901)
- O esquema Realm agora pode Express propriedades do tipo de referência não anuláveis com o novo atributo
[Required]
. (#349) - Exposto um novo evento
Realm.Error
que você pode se inscrever para ser notificado sobre exceções que ocorrem fora do código do usuário. (#938) - Os tipos de tempo de execução da coleção, retornados de
Realm.All
, e a coleção criada para propriedadesIList<T>
emRealmObject
agora implementamINotifyCollectionChanged
para que você possa passá-los para vinculação de dados sem qualquer conversão adicional. (#938, #909) - Todos os RealmObjects implementam
INotifyPropertyChanged
. Isso permite que você os passe diretamente para a vinculação de dados. - Adição do método
Realm.Compact
que permite recuperar o espaço usado pelo Realm. (#968) Realm.Add
retorna o objeto adicionado. (#931)- Suporte para backlinks também conhecidos como
LinkingObjects
. (#219) - Foi adicionado um método de extensão
IList<T>.Move
que permite reordenar elementos dentro da coleção. Para listas gerenciadas, ele chama um método nativo, por isso é um pouco mais eficiente do que remover e inserir um item, mas, mais importante, ele aumentará oCollectionChanged
comNotifyCollectionChangedAction.Move
, o que resultará em uma boa movimento de movimentação, em vez de um recarga de um ListView. (#995)
Correções de Bugs
- Assinar
PropertyChanged
em um RealmObject e modificar uma instância do mesmo objeto em um thread diferente agora aumentará corretamente o evento. (#909) - Usar
Insert
para inserir itens no final de uma propriedadeIList
não lançará mais uma exceção. (#978)
0.80.0 (2016-10-27)
Mudanças de última hora
- Esta versão atualiza o formato do arquivo. As versões mais antigas não poderão abrir arquivos criados com esta versão. (#846)
RealmList<T>
agora está marcado como interno. Se você o estivesse usando em qualquer lugar, migrasse paraIList<T>
. (#880)
Melhorias
A vinculação do iOS deve funcionar - agora adicionamos um atributo [Preserve] a todos os membros unidos de suas
RealmObject
subclasses para que você não precise adicionar manualmente[Preserve(allMembers=true)]
(#822)Realm.Manage
as chamadas agora são muito mais rápidas. Você deve preferir isso aRealm.CreateObject
, a menos que esteja definindo apenas algumas propriedades, enquanto deixa o restante com valores padrão. (#857)Argumento
bool update
adicionado aRealm.Manage
. Quandoupdate: true
for passado, o Realm tentará localizar e atualizar um objeto persistente com a mesma PrimaryKey. Se um objeto com a mesma PrimaryKey não for encontrado, o objeto sem nome será adicionado. Se o objeto passado não tiver uma PrimaryKey, ele será adicionado. Quaisquer objetos relacionados serão adicionados ou atualizados dependendo se eles têm PrimaryKeys. (#871)NOTA: relacionamentos cíclicos, onde as referências de objeto não são idênticas, não serão reconciliados. Por exemplo, isso funcionará como esperado:
var person = new Person { Name = "Peter", Id = 1 }; person.Dog = new Dog(); person.Dog.Owner = person;
No entanto, isso não funcionará - definirá as propriedades da Pessoa para as da última instância que vir:
var person = new Person { Name = "Peter", Id = 1 }; person.Dog = new Dog(); person.Dog.Owner = new Person { Id = 1 };
Isso é importante ao desserializar dados do JSON, onde você pode ter várias instâncias de objeto com o mesmo ID, mas com propriedades diferentes.
Realm.Manage
não lançará mais uma exceção se um objeto gerenciado for passado. Em vez disso, ele retornará imediatamente. (#871)Versão não genérica adicionada de
Realm.Manage
. (#871)Adicionado suporte para PrimaryKeys inteiros anuláveis. Agora você pode ter a propriedade PrimaryKey
long?
ondenull
é um valor único válido. (#877)Foi adicionado um aviso de tecelão ao aplicar atributos de Realm (por exemplo
[Indexed]
ou[PrimaryKey]
) em propriedades não persistentes. (#882)Adicionado suporte para comparações
==
e!=
com objetos de domínio no LINQ (#896), por exemplo:var peter = realm.All<Person>().FirstOrDefault(d => d.Name == "Peter"); var petersDogs = realm.All<Dog>().Where(d => d.Owner == peter);
Adicionado suporte para filtragem
StartsWith(string, StringComparison)
,EndsWith(string, StringComparison)
eEquals(string, StringComparison)
em LINQ. (#893)OBSERVAÇÃO: atualmente, apenas comparações
Ordinal
eOrdinalIgnoreCase
são suportadas. Tentar passar um diferente resultará em erro de tempo de execução. Se nenhum argumento for fornecido,Ordinal
será usado.
0.78.1 (2016-09-15)
Correções de Bugs
Realm.ObjectForPrimaryKey()
agora retorna nulo se não conseguir encontrar um objeto (#833).- A consulta de qualquer coisa que não seja propriedades persistentes agora é lançada em vez de causar uma falha (#251 e #723)
Usa o núcleo 1.5.1
0.78.0 (2016-09-09)
Mudanças de última hora
- O termo
ObjectId
foi substituído porPrimaryKey
para se alinhar com os outros SDKs. Isso afeta o atributo[ObjectId]
utilizado para ornar uma propriedade.
Melhorias
- Você pode recuperar objetos únicos rapidamente usando
Realm.ObjectForPrimaryKey()
se eles tiverem uma propriedade[PrimaryKey]
especificada. (#402) - Migrações manuais agora são suportadas. Você pode especificar exatamente como seus dados devem ser migrados ao atualizar seu modelo de dados. (#545)
- As pesquisas LINQ não lançam mais um
NotSupportedException
se o tipo inteiro no outro lado de uma expressão não corresponder exatamente ao tipo inteiro da sua propriedade. - Métodos LINQ adicionais agora suportados: (#802)
- Último
- LastOrDefault
- Primeiro ou padrão
- SingleOrDefault
- ElementAt
- ElementAtOrDefault
Correções de Bugs
- A pesquisa de tipos de campo caracteres agora funciona. (#708)
- Agora lança uma RealmMigrationSchemaNeededException se você tiver alterado uma declaração de subclasse
RealmObject
e não incrementado oSchemaVersion
(#518) - Corrigiu um erro em que a eliminação de um
Transaction
lançaria umObjectDisposedException
se o seuRealm
fosse coletado no lixo (#779) - Corrigiu a exceção que está sendo lançada
IndexOutOfRangeException
para serArgumentOutOfRangeException
Usa o núcleo 1.5.1
0.77.2 (2016-08-11)
Melhorias
- Definir sua Verbosidade de Construção para
Detailed
ouNormal
agora exibirá uma mensagem para cada propriedade telada, o que pode ser útil se você suspeitar de erros com a tecelagem Fody. - Melhores mensagens de exceção diagnosticarão problemas de emptySchema (#739)
- A avaliação parcial de expressões LINQ significa que mais tipos de expressões são suportados como operandos em expressões binárias (#755)
- Suporte para queries LINQ que verificam
null
contrastring
propriedades,byte[]
eNullable<T>
. - Suporte para
string.IsNullOrEmpty
em propriedades persistentes em queries LINQ. - A construção do esquema foi simplificada para reduzir a sobrecarga ao abrir um Realm
- Os números de versão do esquema agora começam em 0 em vez de UInt64.MaxValue
Correções de Bugs
RealmResults<T>
deve implementarIQueryable.Provider
implicitamente (#752)- Os domínios que fecham implicitamente não invalidarão mais outras instâncias (#746)
Usa o núcleo 1.4.2
0.77.1 (2016-07-25)
Pequenas alterações
- Corrigido um erro ao criar projetos de PCL puro, lançado em v0.77.0 (#715)
- Mensagens de exceção causadas pelo uso de argumentos incompatíveis no LINQ agora incluem o argumento incorreto (#719)
- Projetos PCL que usam ToNotifyCollectionChanged podem ter falhado devido à incompatibilidade entre assinaturas PCL e compilações de plataforma.
Usa o núcleo 1.4.0
0.77.0 (2016-07-18)
Versão quebrada - não construirá projetos PCL
Mudanças de última hora
- A alteração da ordem de classificação na versão anterior foi revertida.
Principais alterações
- Agora é possível introspecção do esquema de um Realm. (#645)
- A classe Realm recebeu sobrecargas para
Realm.CreateObject
eRealm.All
que aceitam argumentos de string em vez de parâmetros genéricos, permitindo o uso da palavra-chavedynamic
com objetos cujo tipo exato não é conhecido no momento da compilação. (#646) - Para Muitos relacionamentos agora podem ser declarados com um
IList<DestClass>
em vez de exigirRealmList<DestClass>
. Isso é significativamente mais rápido do que usarRealmList
devido ao armazenamento em cache da lista. (Emissão #287) - Agora é possível criar objetos autônomo com listas de objetos relacionados. Passar esse objeto para
Realm.Manage
fará com que todo o gráfico de objeto desse objeto para baixo se torne gerenciado.
Pequenas alterações
- Corrigiu uma falha no iOS ao criar muitos domínios de curta duração muito rapidamente em paralelo (Problema #653)
RealmObject.IsValid
pode ser chamado para verificar se um objeto gerenciado foi excluído- O acesso a propriedades em objetos inválidos gerará uma exceção em vez de falhar com uma segfault (#662)
- As exceções lançadas ao criar um Realm não deixam mais um identificador de vazamento (problema #503)
Usa o núcleo 1.4.0
0.76.1 (2016-06-15)
Pequenas alterações
- O construtor estático
Realm
não lançará mais umTypeLoadException
quando houver umSystem.Reflection.Emit.AssemblyBuilder
ativo noAppDomain
atual. - Corrigiu a exceção
Attempting to JIT compile
ao usar a API de Notificações em dispositivos iOS. (Emissão #620)
Mudanças de última hora
Nenhuma alteração na API, mas a ordem de classificação muda ligeiramente com caracteres acentuados agrupados e alguns caracteres especiais classificados de forma diferente. " Um terceiro " agora está à frente de " um terceiro ".
Ele usa a tabela em ftp://ftp.unicode.org/Public/UCA/latest/allkeys.txt
Ele agrupa todos os caracteres que parecem visualmente idênticos, ou seja, coloca a, à, å juntos e antes de º, o, ‑ mesmo. Isso é uma falha porque, por exemplo, å deve vir por último na Dinamarca. Mas é o melhor que podemos fazer agora, até termos mais informações sobre a localidade.
Usa o núcleo 1.1.2
0.76.0 (2016-06-09)
Principais alterações
RealmObject
as classes agora implementarão implicitamenteINotifyPropertyChanged
se você especificar a interface em sua classe. Agradecimentos a joe escalonamento por esta contribuição!
Pequenas alterações
long
é suportado em queries (Emissão #607)- Erro de vinculador procurando
System.String System.String::Format(System.IFormatProvider,System.String,System.Object)
corrigido (Problema #591) - Os descendentes de segundo nível de
RealmObject
e propriedades estáticas em classesRealmObject
agora fazem com que o tecelão relate erros corretamente, pois nós (ainda) não os suportamos. (Emissão #603) - A chamada de
.Equals()
em objetos autônomo não é mais lançada. (Emissão #587)
0.75.0 (2016-06-02)
Mudanças de última hora
- O formato de arquivo dos arquivos Realm foi alterado. Os arquivos serão atualizados automaticamente, mas não é possível abrir um Arquivo de Realm com versões mais antigas do Realm . NOTA: se você estava usando o navegador Realm especificado para o formato antigo, precisa atualizar. Pegue a versão mais recente aqui.
RealmResults<T>
não implementa mais implicitamenteINotifyCollectionChanged
. Use o novo métodoToNotifyCollectionChanged
.
Principais alterações
RealmResults<T>
pode ser observado para alterações granulares por meio do novo métodoSubscribeForNotifications
.Realm
recebeu o métodoWriteAsync
, que permite que uma transação de gravação seja executada em uma thread em background.- Os modelos de Realm agora podem usar propriedades
byte[]
para armazenar dados binários. RealmResults<T>
recebeu um novo método de extensãoToNotifyCollectionChanged
que produz um encapsulador semelhante aObservableCollection<T>
adequado para vinculação de dados MVVM.
Pequenas Correções
- Propriedades
DateTimeOffset
anuláveis são suportadas agora. - Definir
null
para uma propriedade de string agora retornará corretamentenull
- A falha ao instalar o Fody agora causará uma exceção como "Realms.RealmException: Fody não instalado corretamente. RDB2_with_full_Realm.Dog é um RealmObject, mas não foi criado." em vez de um
NullReferenceException
- O PCL
RealmConfiguration
estava sem alguns membros. - O tecelão Fody agora pode ser descoberto em caminhos de repositório nuget não padrão.
0.74.1 Lançado (2016-05-10)
Pequenas Correções
- Os Realms agora são atualizados corretamente no Android quando modificados em outros threads/processos.
- Corrige falhas em combinações pesadas de leituras e escritas threaded.
Pequenas alterações
- Os dois pacotes NuGet
Realm
eRealmWeaver
foram combinados em um único pacoteRealm
. - Os métodos
String.Contains(String)
,String.StartsWith(String)
eString.EndsWith(String)
agora suportam expressões de variáveis. Anteriormente, eles só funcionavam com strings literais. RealmResults<T>
agora implementaINotifyCollectionChanged
criando o eventoCollectionChanged
comNotifyCollectionChangedAction.Reset
quando sua tabela subjacente ou resultado de query é alterado por uma transação de gravação.
0.74.0 beta privado (2016-04-02)
Principais alterações
- O operador de montagem Realm agora envia dados de uso anônimos durante cada compilação, para que possamos rastrear estatísticas de construtores exclusivos, como feito com os produtos Java, Swift e Objective-C (problema #182)
Realm.RemoveRange<>()
eRealm.RemoveAll<>()
métodos adicionados para permitir que você exclua objetos de um Realm.Realm.Write()
método adicionado para executar código em uma transação implicitamente confirmada- Agora você pode restringir as classes permitidas em um determinado Realm usando
RealmConfiguration.ObjectClasses
. - Melhorias no LINQ:
- As pesquisas simples de booles funcionam sem ter que usar
== true
(problema #362) - ! o operador trabalha para negar propriedades booleanas simples ou expressões complexas (problema #77)
- Contagem, Único e Primeiro agora podem ser usados após uma expressão Onde , (#369), por exemplo
realm.All<Owner>().Where(p => p.Name == "Dani").First();
e com uma expressão Lambda
realm.All<Owner>().Single( p => p.Name == "Tim");
- A classificação agora é fornecida usando as cláusulas
OrderBy
,OrderByDescending
,ThenBy
eThenByDescending
. As classificações podem ser aplicadas aos resultados de uma query a partir de uma cláusulaWhere
ou classificando a classe inteira aplicando apósAll<>
. - Os métodos
String.Contains(String)
,String.StartsWith(String)
eString.EndsWith(String)
podem agora ser utilizados em cláusulas Onde. - As propriedades DateTimeOffset podem ser comparadas em queries.
- As pesquisas simples de booles funcionam sem ter que usar
- O suporte para compilações do
armeabi
em dispositivos ARM V5 e V6 antigos foi removido.
Pequenas alterações
- Concluir
RealmList.CopyTo
para que você possa aplicarToList
a listas relacionadas (edição #299) - O NuGet agora insere
libwrappers.so
para destinos do Android usando$(SolutionDir)packages
para lidar com os diferentes caminhos relativos em modelos de aplicativos multiplataforma (Xamarin Formats) em comparação com os modelos Android puros. Realm.RealmChanged
o evento notifica você sobre as alterações feitas no RealmRealm.Refresh()
garante que o Realm esteja atualizado com alterações de outras threads.
0.73.0 beta privado (2016-02-26)
Principais alterações
RealmConfiguration.EncryptionKey
adicionado para que os arquivos possam ser criptografados e os arquivos criptografados existentes de outras fontes do Realm sejam abertos (supondo que você tenha a chave)
Pequenas Correções
- Para usuários do PCL, se você usar
RealmConfiguration.DefaultConfiguration
sem vincular uma dll específica da plataforma, agora receberá a mensagem de aviso com umPlatformNotSupportedException
. Anteriormente jogou umTypeInitExepction
. - Atualização para o Core v0.96.2 e o ObjectStore correspondente (problema #393)
0.72.1 beta privado (2016-02-15)
Sem alterações funcionais. acabou de adicionar compilações de biblioteca para os alvos de bit 64 x86_64
e arm64-v8a
do Android.
0.72.0 beta privado (2016-02-13)
Usa o núcleo do Realm 0.96.0
Principais alterações
- Suporte adicionado para PCL para que agora você possa usar o NuGet em sua GUI PCL ou bibliotecas de modelos de visualização.
0.71.1 beta privado (2016-01-29)
Pequenas Correções
A criação de aplicativos iOS direcionados ao simulador às vezes gera um erro como:
Error MT5209: Native linking error...building for iOS simulator,
but linking in object file built for OSX, for architecture i386 (MT5209)
Isso foi corrigido removendo uma biblioteca de simulador redundante incluída no NuGet
0.71.0 beta privado (2016-01-25)
Utiliza o núcleo do Realm 0.95.6.
Mudanças na plataforma
Agora apoiando:
- Xamarin Studio no Mac - iOS e Android
- Xamarin Studio no Windows - Android
- Visual Studio no Windows - iOS e Android
Principais alterações
- Suporte para Android adicionado, conforme listado acima.
- Adicionado
RealmConfiguration
para fornecer uma maneira reutilizável de especificar o caminho e outras configurações. - Adicionado
Realm.Equals
,Realm.GetHashCode
eRealm.IsSameInstance
para fornecer verificação de igualdade para que você possa confirmar que os domínios abertos no mesmo thread são iguais (instância interna compartilhada). - Adicionado
Realm.DeleteFiles(RealmConfiguration)
para ajudar na limpeza de arquivos relacionados. - Adicionados tipos básicos anuláveis, como
int?
. Realm.All<userclass>().Count()
otimizado para obter uma contagem rápida de todos os objetos de uma determinada classe.- Listas relacionadas agora são suportadas em objetos standalone.
LINQ
Count()
emWhere()
implementado.Any()
emWhere()
implementado.First( lambda )
eSingle( lambda )
implementado.- A otimização significativa de
Where()
para ser adequadamente preguiçosa estava instanciando todos os objetos internamente.
Alterações significativas na API
[PrimaryKey]
atributo renomeado[ObjectId]
.Realm.Attach(object)
renomeadoManage(object)
.- As listas de objetos relacionados agora são declaradas com
IList<otherClass>
em vez deRealmList
.
Correções de Bugs
- Corrigido o bug que causava um erro de vinculador no simulador do iPhone (#375)
0.70.0 Primeiro beta privado (2015-12-08)
Requer instalação a partir de cópia privada do download do NuGet.
Estado
- iOS suportado apenas com Xamarin Studio.
- Modelo básico e operações de leitura/escrita com pesquisas simples de LINQ
Where
. - NuGet hospedado como downloads do repositório private Realm/realm-dotnet.