2011-06-26 11 views
6

Przepraszam, jeśli używam niewłaściwej terminologii tutaj. Wciąż jestem bardzo w świecie ORM, ale bawię się z MongoDb i naprawdę kocham to, co widzę. Jedną z rzeczy, ja nie lubiących to:Sterowniki MongoDb na C#, czy można je zawrzeć w ogólnej sesji?

var books = bookRepository.GetCollection<BsonDocument>("books"); 

I

foreach (var book in books.FindAllAs<Book>()) 
{ 
    Console.WriteLine("Author: {0}, Title: {1}", book.Author, book.Title); 
} 

znalazłem kilka tutoriali na owijanie NoRM in a session ale nie mogę dowiedzieć się, jak to zrobić za pomocą CSharp Kierowcy (ci, których Mongodb zaleca/ma na swojej stronie github).

Co naprawdę chciałbym zrobić, to coś podobnego do pierwszego przykładu:

var bookRepository = MongoRepository<Book>(); // probably should use IoC to resolve this 

i

foreach (var book in books.FindAll()) 

Voila! Prawdopodobnie nie jestem pierwszą osobą, która tego chce, używanie ciągów wszędzie wydaje się nieco nudne, chociaż przyznaję, że samouczek jest tylko przykładem. Czy istnieje przykład "najlepszych praktyk" do takiego ustawienia?

Edycja: Daj mi znać, jeśli to jest szalona rozmowa, a nie jak robić rzeczy w Mongo, znowu jest to mój pierwszy testowy projekt.

+0

Co pytasz o dokładnie? W ORM nadal musisz skonfigurować ORM, aby wiedział, który obiekt jest przechowywany w której tabeli; to zmusza cię do strun. Możesz na pewno przenieść ciąg znaków o nazwie kolekcji z wywołania "pobierz repozytorium" do kroku "Konfiguruj repozytoria", podobnego do odwzorowań Fluent Nhibernate. – Avish

Odpowiedz

5

Oto urywek z mojego projektu:

public static MongoCollection<T> GetCollection<T>(string collectionName = null) 
{ 
    if (string.IsNullOrWhiteSpace(collectionName)) 
    { 
     Type g = typeof (T); 
     collectionName = g.Name; 
    } 
    return MongoServer.Create(Config.MongoConnectionString).GetDatabase(Config.Database).GetCollection<T>(collectionName); 
} 

Teraz nie musisz podać nazwę kolekcji jako ciąg znaków, chyba że chcesz go zastąpić:

var collection = GetCollection<MyEntity>(); 

lub

var collection = GetCollection<MyEntity>("SomeOtherCOllection"); 

Możesz użyć jakiegoś narzędzia \ fleksji do fleksji, aby zmienić nazwy kolekcji, jeśli chcesz.

Nie musisz również podawać typu w metodach Find, jeśli określiłeś typ podczas tworzenia instancji klasy kolekcji, tak jak powyżej.

Na przykład, to jak to zrobić:

MongoCursor<MyEntity> results = collection.FindAll(); 

lub

MongoCursor<MyEntity> results = collection.Find(query); 
+0

Jestem w trakcie tworzenia ogólnej klasy Mongo DAL. Czy przypadkiem masz inne metody, takie jak metoda GetCollection dla CRUD ops, którą chciałbyś udostępnić? –

+0

@JeffBorden Niestety nie. Większość CRUD była specyficzna dla każdego zadania. –

+0

Mam cię, dzięki! –