Sto usando mongDb con MongoDrive, mi chiedo come posso implementare in tutte le mie classi i [BsonIgnoreExtraElements] .
So che c’è un modo attraverso la ConventionProfile , ma non so come implementarlo.
Utilizzare il metodo SetIgnoreExtraElementsConvention
(dalla sezione Convenzioni dell’esercitazione di serializzazione driver C #):
var myConventions = new ConventionProfile(); myConventions.SetIgnoreExtraElementsConvention(new AlwaysIgnoreExtraElementsConvention())); BsonClassMap.RegisterConventions(myConventions, (type) => true);
Il parametro (type) => true
è un predicato dipendente dal tipo di class, che determina se applicare la convenzione. Quindi, secondo le tue necessità, dovrebbe semplicemente restituire true indipendentemente; ma potresti usarlo per impostare / escludere la convenzione sui tipi specificati se lo desideri.
modificare
Per commento di Evereq, quanto sopra è obsoleto. Ora usa:
var conventionPack = new ConventionPack { new IgnoreExtraElementsConvention(true) }; ConventionRegistry.Register("IgnoreExtraElements", conventionPack, type => true);
Fondamentalmente,
mongoDB ti offre la possibilità di archiviare i documenti all’interno di una singola raccolta che può avere ciascuno il proprio schema. Questo è un cambiamento drastico se si dispone di uno sfondo nei database relazionali. In un database relazionale, si dispone di uno schema statico per tabella e non è ansible deviare da senza modificare la struttura della tabella. Nell’esempio seguente, ho definito una class Person e una class PersonWithBirthDate che deriva dalla class Person. Questi possono essere entrambi memorizzati nella stessa collezione in un database mongoDB. In questo caso, si supponga che i documenti siano memorizzati nella raccolta Persone.
Vedi il codice di esempio –
public class Person { public string FirstName { get; set; } public string LastName { get; set; } } public class PersonWithBirthDate : Person { public DateTime DateOfBirth { get; set; } }
Ora, è ansible recuperare facilmente e dei documenti e fare in modo che il driver mongoDB C # deserializzi il documento nella class PersonWithBirthDate. Tuttavia, si verificheranno problemi se si interroga la raccolta Persone e si tenta di far deserializzare il driver nella class Person. Riceverai un errore che ci sono elementi che non possono essere deserializzati. Questo facilmente risolvibile aggiungendo l’attributo [BsonIgnoreExtraElements] alla class Person. Puoi vedere la class modificata di seguito. Questo istruirà il conducente a ignorare qualsiasi elemento che non può deserializzare in una proprietà corrispondente. Con l’attributo qualsiasi documento nella collezione Persone può essere desertificato nella class Person senza errori.
[BsonIgnoreExtraElements] public class Person { public string FirstName { get; set; } public string LastName { get; set; } } public class PersonWithBirthDate : Person { public DateTime DateOfBirth { get; set; } }
Spero che questo chiarisca la tua comprensione.