c# - MongoDb 的 C# 驱动程序,是否可以将其包装在通用 session 中?

标签 c# mongodb mongodb-.net-driver

如果我在这里使用了错误的术语,我深表歉意。我仍然非常喜欢 ORM 世界,但我一直在玩 MongoDb,并且非常喜欢我所看到的。我不喜欢的一件事是:

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

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

我找到了几个关于包装的教程 NoRM in a session但我不知道如何使用 CSharp 驱动程序(Mongodb 推荐/在其 github 页面上提供的驱动程序)。

对于第一个示例,我真正想做的是这样的:

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

foreach (var book in books.FindAll())

瞧!我可能不是第一个想要这个的人,到处使用字符串似乎有点疯狂,尽管我承认本教程只是一个例子。是否有“最佳实践”示例以这种方式进行设置?

编辑:如果这是疯狂的谈话,而不是如何在 Mongo 中做事,请告诉我,这又是我的第一个测试项目。

最佳答案

这是我项目的片段:

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

现在我不需要将集合名称指定为字符串,除非我想覆盖它:

var collection = GetCollection<MyEntity>();

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

如果需要,您可以使用一些变形实用程序\库来复数您的收藏名称。

此外,如果您在实例化集合类时指定了类型,则不需要在 Find 方法中指定类型,就像我上面所说的那样。

例如,我是这样做的:

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

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

关于c# - MongoDb 的 C# 驱动程序,是否可以将其包装在通用 session 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6487075/

相关文章:

c# - Asp.Net Identity 2.0 中的 RoleManager 似乎不支持 Guid

c# - 如何使用 powershell 为构建服务器构建、发布 ASP.NET 核心项目?

c# - 在 Xaml 中声明元组

javascript - 从 sails.js/mongodb 中提取公共(public)代码

mongodb - 用mongodb玩转2.0 Morphia设计模式

c# - 返回非结构化 BsonDocument 作为 ApiController 中的类属性

c# - 从整数到整数的转换方式有区别吗?

php - 无法从 pecl 网站下载 php_mongodb.dll

c# - MongoDB C#驱动多字段查询

c# - MongoDB c# 使用定义生成器检索文档中数组中的所有匹配元素