2012-05-13 3 views
-2

Je suis nouveau sur C# et MongoDB et je rencontre des problèmes lors de l'insertion/la mise à jour d'éléments d'épargne dans un tableau imbriqué en utilisant un modèle de référentiel en ligne (http://www.primaryobjects.com/cms/article137.aspx). Voici le code:MongoDB sauvegarde les commentaires dans un tableau imbriqué

Modèles:

public class BlogModel 
{ 
    [BsonId] 
    public ObjectId Id { get; set; } 
    public DateTime Date { get; set; } 
    [Required] 
    public string Title { get; set; } 
    [Required] 
    public string Body { get; set; } 
    public string Author { get; set; } 
    public IList<CommentModel> Comments { get; set; } 
} 

public class CommentModel 
{ 
    [BsonId] 
    public ObjectId Id { get; set; } 
    public DateTime Date { get; set; } 
    public string Author { get; set; } 
    [Required] 
    public string Body { get; set; } 
} 

Et le modèle référentiel:

public void Add<T>(T item) where T : class, new() 
{ 
    _db.GetCollection<T>().Save(item); 
} 

public void Add<T>(IEnumerable<T> items) where T : class, new() 
{ 
    foreach (T item in items) 
    { 
     Add(item); 
    } 
} 

Comment pourrais-je ajouter un commentaire au tableau imbriqué en utilisant la classe 'Ajouter'?

Répondre

0

En utilisant ce modèle de référentiel, il y aurait quatre étapes:

  1. instancier un dépôt de type BlogModel
  2. Récupérer le document auquel vous voulez ajouter des commentaires
  3. Ajouter un commentaire (s) vers le document
  4. Enregistrez le document dans la collection.

Quelque chose comme ceci:

var myRepository = new Repository<BlogModel>(); 
var myDocument = myRepository.Find(some_id); // retrieve BlogModel document to update 
myDocument.Comments.Add(some_new_comments); // add to IList 
myRepository.Add(myDocument);  // save changes to the document back to the repository 

Notez que depuis votre Ajouter méthode de dépôt utilise le C# pilote Enregistrer méthode, il a vraiment la fonction de insert or update. Et dans ce cas, vous ne disposez pas d'un référentiel de CommentModel, car il fonctionne comme un tableau de documents incorporé dans le document BlogModel.

+0

Merci dbaseman. Pensez-vous qu'il serait préférable d'ajouter une classe Update à mon Repository? Permettre moi de faire quelque chose comme ... 'addComment public void (ObjectId postID, Commentaire commentaire) { _posts.Collection.Update (Query.EQ ("_ id", Id), Update.PushWrapped ("Commentaires" , commentaire)); } ' – Aymur

+0

@ user1392537 Oui, je suppose que cela a du sens. Je ne suis pas sûr de savoir comment vous faites cela sans "casser" le modèle de dépôt générique, cependant. Je suppose que juste sous-classe Repository ou utiliser des méthodes d'extension? – McGarnagle

Questions connexes