不以IRepository模式

时间:2016-05-11 20:16:18

标签: c# mongodb asp.net-core repository-pattern

我在ASP.NET Core RC1(dnx完整CLR451)Update 1 Web项目中使用Repository模式。我有一个非常奇怪的问题...

技术信息:我使用带有C#驱动程序的MongoDB,并且我在mLab中有一个群集。

我在我的Startup.cs中注册我的DI存储库:

services.AddSingleton<IRepository<MyEntity>, MongoRepository<MyEntity>>();

MongoRepository有这个私有变量和构造函数:

/// <summary>
/// MongoCollection field.
/// </summary>
private readonly IMongoCollection<T> _collection;

/// <summary>    
/// Initializes a new instance of the MongoRepository class.
/// Uses the Default App/Web.Config connectionstrings to fetch the connectionString and Database name.
/// </summary>
/// <remarks>Default constructor defaults to "MongoServerSettings" key for connectionstring.</remarks>
public MongoRepository(IOptions<AppSettings> appSettings)
    : this(appSettings.Value.ConnectionString)
{

}

/// <summary>        
/// Initializes a new instance of the MongoRepository class.
/// </summary>
/// <param name="connectionString">Connectionstring to use for connecting to MongoDB.</param>
public MongoRepository(string connectionString)
{
    _collection = Util<TKey>.GetCollectionFromConnectionString<T>(connectionString);
}

最后,我在每个存储库中创建一个MongoClient:

/// <summary>        
/// Creates and returns a MongoDatabase from the specified url.
/// </summary>
/// <param name="url">The url to use to get the database from.</param>
/// <returns>Returns a MongoDatabase from the specified url.</returns>
private static IMongoDatabase GetDatabaseFromUrl(MongoUrl url)
{
    var client = new MongoClient(url);
    return client.GetDatabase(url.DatabaseName); // WriteConcern defaulted to Acknowledged
}

如果我在我的存储库DI中使用AddScoped而不是AddSingleton,我在连接池中遇到错误(check my other question

我的字符串行为是,例如,30 o 40个用户在我的网络应用程序中同时在教室中工作,他们注意到有时数据没有保存。我的团队没有检测到这个问题,但我们可以测试30到40个用户(压力测试和单元测试已通过)。

我的问题是......这是正常行为吗?有意义的是,我的MongoDb客户端或存储库冲突有问题,许多用户在一起工作?我是否需要改变MongoClient的实现方式?也许是另一个单身人士?

感谢。

0 个答案:

没有答案