2012-05-13 6 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); 
    } 
} 

?このリポジトリパターンを使用して

答えて

0

は、4つのステップがあるでしょう:

  1. タイプのリポジトリをインスタンス化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#ドライバ保存メソッドを使用しているので、それは本当にinsert or updateの機能を有すること。この場合、CommentModelというリポジトリは、BlogModelドキュメントに埋め込まれたドキュメント配列として機能するため、リポジトリを持たないでしょう。

+0

ありがとうdbaseman。 更新クラスをリポジトリに追加する方が良いと思いますか? '公共無効でaddComment(ObjectIdがpostId、コメントのコメント) { _posts.Collection.Update(Query.EQ( "_ ID"、同上)、 Update.PushWrapped( "コメント" ...私のような何かをすることができます、コメント)); } ' – Aymur

+0

@ user1392537はい、私はそれが理にかなっていると思います。私はあなたがジェネリックリポジトリパターンを "壊す"ことなくそれをどうやって行うのかは分かりません。私はちょうどサブクラスのリポジトリか、拡張メソッドを使用すると思いますか? – McGarnagle