2011-06-26 28 views
6

Tôi xin lỗi nếu tôi đang sử dụng thuật ngữ sai ở đây. Tôi vẫn còn rất nhiều trong thế giới ORM, nhưng tôi đã chơi đùa với MongoDb và thực sự yêu thích những gì tôi thấy. Một trong những điều tôi không thích là thế này:Trình điều khiển C# của MongoDb, có thể bọc nó trong một phiên chung không?

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

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

Tôi đã tìm thấy một số hướng dẫn về gói NoRM in a session nhưng tôi không thể tìm ra cách để làm điều đó bằng cách sử dụng CSharp Trình điều khiển (những người mà Mongodb đề xuất/có trên trang github của họ).

Những gì tôi thực sự muốn làm là một cái gì đó như thế này cho ví dụ đầu tiên:

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

foreach (var book in books.FindAll()) 

Voila! Tôi có lẽ không phải là người đầu tiên muốn điều này, bằng cách sử dụng dây ở khắp mọi nơi có vẻ hơi hấp dẫn, mặc dù tôi sẽ cấp rằng hướng dẫn chỉ là một ví dụ. Có một ví dụ "thực hành tốt nhất" để thiết lập này tất cả lên theo cách như vậy?

Chỉnh sửa: Vui lòng cho tôi biết nếu đây là cuộc trò chuyện điên rồ và không phải cách thực hiện mọi thứ ở Mongo, một lần nữa đây là dự án thử nghiệm đầu tiên của tôi.

+0

các người hỏi gì nữa, chính xác? Trong các ORM, bạn vẫn cần cấu hình ORM để nó biết đối tượng nào được lưu trữ trong bảng nào; điều này buộc bạn phải có dây. Bạn chắc chắn có thể di chuyển chuỗi với tên bộ sưu tập từ cuộc gọi "get repository" đến một bước "cấu hình kho", giống như ánh xạ của Fluent Nhibernate. – Avish

Trả lời

5

Dưới đây là đoạn mã từ dự án của tôi:

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

Bây giờ tôi không cần phải chỉ định một tên bộ sưu tập như là một chuỗi trừ khi tôi muốn ghi đè lên nó:

var collection = GetCollection<MyEntity>(); 

hoặc

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

Bạn có thể sử dụng một số tiện ích uốn cong \ library để đa nguyên hóa tên bộ sưu tập của bạn nếu bạn muốn.

Ngoài ra, bạn không cần phải chỉ định loại trong các phương thức Find nếu bạn đã chỉ định loại khi khởi tạo một lớp bộ sưu tập, như tôi có ở trên.

Ví dụ, đây là cách tôi làm điều đó:

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

hoặc

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

Tôi đang trong quá trình tạo lớp Mongo DAL chung. Bạn có cơ hội có các phương pháp khác như phương pháp GetCollection cho CRUD ops mà bạn sẵn sàng chia sẻ không? –

+0

@JeffBorden Xin lỗi tôi không. Hầu hết CRUD đều dành riêng cho từng nhiệm vụ. –

+0

OK, cảm ơn! –

Các vấn đề liên quan