2012-05-13 2 views
-2

Я новичок как в C#, так и в MongoDB, и у меня есть некоторые проблемы с вставкой/обновлением/сбережениями элементов в вложенный массив, используя шаблон хранилища онлайн (http://www.primaryobjects.com/cms/article137.aspx). Вот код:MongoDB сохранение комментариев к вложенному массиву

Модели:

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; } 
} 

И шаблон репозитория:

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); 
    } 
} 

Как добавить комментарий к вложенному массиву, используя класс 'Add'?

ответ

0

Используя этот шаблон репозитория, будет четыре шага:

  1. Instantiate хранилище типа BlogModel
  2. Получить документ, к которому вы хотите добавить комментарии
  3. Добавить комментарий (ев) к документу
  4. Сохраните документ обратно в коллекцию.

Что-то вроде этого:

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 

Обратите внимание, что с вашего Добавить метод хранилища использует C# Driver Сохранить метод, он действительно имеет функцию insert or update. И в этом случае у вас не было бы хранилища CommentModel, поскольку он функционирует как массив документов, встроенный в документ BlogModel.

+0

Спасибо dbaseman. Как вы думаете, было бы лучше добавить класс обновления в мой репозиторий? Позволяя мне делать что-то вроде ... 'общественная пустота AddComment (ObjectId сообщения дан, комментарий комментарий) { _posts.Collection.Update (Query.EQ ("_ идентификатор", Id), Update.PushWrapped ("Комментарии" , комментарий)); } ' – Aymur

+0

@ user1392537 Да, я полагаю, это имеет смысл. Я не уверен, как вы это делаете, не разбирая шаблон общего репозитория. Я думаю, что только подкласс класса Replaceitory или использовать методы расширения? – McGarnagle

Смежные вопросы