2012-11-22 1 views
0

Ce sont mes premiers jours avec Mongo (et NoSQL en général), donc je peux essayer quelque chose qui est seulement possible dans ma tête.erreur de collection MongoDB avec l'héritage de type (FileFormatException)

Configuration:

DB: MongoDB 2.2.1

Interface: dernier pilote 10gen C# à partir NuGet

J'ai une classe générale comme celui-ci

public class User { public string userName {get;set;} } 

puis une implémentation spécifique à l'application comme ceci

public class App1User : User { public int appSpecificProperty { get;set; } } 

Problème:

je peux charger Dans ma demande un enregistrement qui a été enregistré en tant que type utilisateur que l'utilisateur soit ou App1User. Malheureusement, une fois que j'ai enregistré un enregistrement en utilisant le type App1User, je ne peux plus le charger en tant qu'utilisateur (FileFormatException: Element 'appSpecificProperty' ne correspond à aucun champ ou propriété de la classe User).

je charger des articles comme celui-ci:

var collection = mongDB.GetCollection<User>("users"); 
var query = new QueryDocument("username" : userName); 
var user = collection.Find(query).SingleOrDefault(); // error here if record was type App1User 

Ceci est un problème que je veux utiliser une bibliothèque d'authentification des utilisateurs sur plusieurs projets, puis apparaissent juste l'objet utilisateur pour ajouter des paramètres spécifiques à l'application.

Répondre

0

J'ai découvert que vous devez marquer votre classe parent avec cet attribut

[BsonDiscriminator("baseuser", RootClass = true)] 

Malheureusement, ce ne fixer de nouveaux records, je ne l'ai pas compris comment appliquer ce correctif aux dossiers existants qui ne peuvent pas charger.

+0

si vous savez ce que la mise à jour dans le document, il devrait être possible d'exécuter une requête de mise à jour de mongo [de shell interactif] (http://www.mongodb.org/display/DOCS/mongo+-+The+Interactive+ Shell) à tous vos dossiers problématiques. – Eric

+0

i ont la même chose, et je mis [BsonDiscriminator] pour toutes les classes, et aussi je mis sur racines ..., mais encore je fatigué quelque chose comme ça et je me suis erreur: « FirstName" ne correspond à aucun champ ou propriété de RealEstate.Models.Owner de classe » dans' IEnumerable all = _db.GetCollection (_tableName) .FindAll(). var liste = all.ToList(); liste de retour, 'je commence à construire mon projet basé sur quelque chose que je ne fini il y a longtemps, j'ai été créé ce modèle sous une forme de hiérarchie inheritence dans NHibernate, mais maintenant je ne suis pas sûr si le support mongo, ou comment dois-je appeler/magasin les – deadManN

+0

laissez-moi ajouter, le propriétaire lui-même n'est pas utile, et je stocke un modèle de type personne, ou une agence qui sont héritées de propriétaire. – deadManN