我想创建一个简单的DbContext
类,以避免在我的存储库中重复代码。问题是我不知道如何在构造函数中初始化/配置自己然后返回自己。我只知道如何在该类中分配其他属性然后调用它。
我不确定如何恰当地表达我的问题所以随意编辑,但是我认为如果你看一下代码就会非常清楚。
正如您所看到的,我在每个查询上都在调用.GetDatabase
,我想要删除.GetDatabase
并让_db
返回.GetDatabase
返回的内容。
的DbContext
public class DbContext
{
public DbContext()
{
var client = new MongoClient("mongodb://localhost");
var server = client.GetServer();
this.GetDatabase = server.GetDatabase("test");
}
public MongoDatabase GetDatabase { get; private set; }
}
存储库
public class AdministratorRepository
{
private readonly DbContext _db = new DbContext();
public Administrator GetByUsername(string username)
{
return _db.GetDatabase // I want to remove this .GetDatabase and make my _db itself return database
.GetCollection<Administrator>("administrators")
.FindOne(Query<Administrator>.EQ(x => x.Username, username));
}
}
答案 0 :(得分:2)
您需要向DbContext
类添加一个方法:
public ?? GetCollection<T>(string collection)
{
return _db.GetCollection<T>(collection);
}
我认为类型是MongoCollection
,但我不确定。现在你可以这样做:
return _db.GetCollection<Administrator>("administrators")
.FindOne(Query<Administrator>.EQ(x => x.Username, username));
答案 1 :(得分:0)
假设您的DbContext
只是用于初始化MongoDatabase
的包装器,请尝试以下操作:
public class DbContext
{
public static MongoDatabase GetDatabase()
{
var client = new MongoClient("mongodb://localhost");
var server = client.GetServer();
return server.GetDatabase("test");
}
}
然后在客户端代码中:
private readonly MongoDatabase _db = DbContext.GetDatabase();
此外,您最好将连接字符串和数据库名称作为参数传递,并避免在方法中对其进行硬编码。