我在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的实现方式?也许是另一个单身人士?
感谢。