在我的.NET Core 2.0项目中的xUnit集成测试中,我无法在终端中看到同时打印测试结果的日志消息.在WebHost环境中运行代码时,日志将打印到控制台.
这是我在测试构造函数中配置日志记录的方法:
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.Tests.json")
.Build();
var services = new ServiceCollection();
services.AddLogging(options => {
options.AddConfiguration(config.GetSection("Logging"));
options.AddConsole();
options.AddDebug();
});
var serviceProvider = services.BuildServiceProvider();
var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
var logger = loggerFactory.CreateLogger("Test");
logger.LogError("From ctor");
Run Code Online (Sandbox Code Playgroud)
但我没有看到任何日志消息.
我的收藏中的对象看起来像:
{ MyArray:[null, "some value", null] }
Run Code Online (Sandbox Code Playgroud)
我想查询具有null值的对象作为数组元素.查询
db.collection.find({"MyArray":null})
Run Code Online (Sandbox Code Playgroud)
不起作用,它似乎只找到MyArray为null的对象,例如
{ MyArray:null }
Run Code Online (Sandbox Code Playgroud)
我如何定义查询?
编辑:请看我的一个真实的对象:
{
"_id" : BinData(3,"ch9PrWveqU6niB6FGVhIOg=="),
"PeerGroup" : "male",
"ProductId" : BinData(3,"weRiKOtXEUSDZHkGHLcwzw=="),
"CategoryIds" : [
BinData(3,"BXzpwVQozECLaPkJy26t6Q=="),
BinData(3,"ox303ZeM50KelvoUbPBJ8Q=="),
BinData(3,"26ziaY+G9UKMyjmtVkkhcg=="),
BinData(3,"D2X8vObte0eJHNcDfp2HBw==")
],
"ShopId" : BinData(3,"ZdfPmrlKR0GkLPC4djJuKw=="),
"BrandId" : BinData(3,"kCHyuyLvgECxPF1nxwr7qQ=="),
"Created" : ISODate("2012-08-24T07:42:12.416Z"),
"LastActivity" : ISODate("2013-01-14T19:38:11.776Z"),
"Price" : 129.9,
"Sale" : false,
"Rating" : 11.057340703605368,
"RatingTimed" : 0.05670431130054035,
"Available" : null,
"FreeDelivery" : null,
"Attrs" : [
null,
null,
null,
null
]
}
Run Code Online (Sandbox Code Playgroud)
然后我通过以下方式查询:
db.collection.find({"Attrs":null})
Run Code Online (Sandbox Code Playgroud)
没有结果.
我已经使用Spring.NET和NHibernate多年了,我非常满意.但是,我总是在玩多线程,Reactive Extensions以及最终的Task Parallel Library这是一个很棒的框架.不幸的是,由于NHiberntate的会话不是线程安全的,所有类型的多线程方法都会失败.
我问你如何从并行编程中受益并仍然使用NHibernate.
例如:我有一个CustomerRegistrationService
类,哪个方法Register
执行几个任务:
ICustumer customer = this.CreateCustomerAndAdresses(params);
this.CreateMembership(customer);
this.CreateGeoLookups(customer.Address);
this.SendWelcomeMail(customer);
Run Code Online (Sandbox Code Playgroud)
最后两种方法是并行运行的理想候选方法,CreateGeoLookups
调用一些Web服务来确定客户地址的地理位置,并创建一些新实体以及更新客户本身.SendWelcomMail
它做了什么.
因为CreateGeoLookups
确实使用NHibernate(虽然通过存储库对象,因此NHibernate通过接口/依赖关系实际上是隐藏的),但它不能与Task.Factory.StarNew(...)或其他线程机制一起使用.
我的问题不是解决我所描述的这个问题,但我想听听你关于NHibenrate,Spring.NET和并行方法的问题.
非常感谢Max
我希望你能帮助我。
我正在我的 C# 4.0 应用程序中执行一些需要身份验证的 webrequest。我只是使用CredentialsCache.DefaultCredentials
. 只要我不通过Task<T>.Factory.StartNew(...)
. 然后我收到 401 错误。我假设凭据没有传递给子线程?
如何将凭据传递给任何子任务/线程?
.net c# authentication task-parallel-library credentialscache
我在运行的8GB linux机器上有一个mongodb.目前它处于测试模式,因此很少有其他请求进入,如果有的话.
我有一个colelction项目,其中包含100万个文档.我创建的字段的索引:对等组和CategoryIds(其为3-6的元件,这将在一个多键得到的阵列): db.items.ensureIndex({PeerGroup:1, CategoryIds:1}
.
当我在查询时
db.items.find({"CategoryIds" : new BinData(3,"xqScEqwPiEOjQg7tzs6PHA=="), "PeerGroup" : "anonymous"}).explain()
Run Code Online (Sandbox Code Playgroud)
我有以下结果:
{
"cursor" : "BtreeCursor PeerGroup_1_CategoryIds_1",
"isMultiKey" : true,
"n" : 203944,
"nscannedObjects" : 203944,
"nscanned" : 203944,
"nscannedObjectsAllPlans" : 203944,
"nscannedAllPlans" : 203944,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 1,
"nChunkSkips" : 0,
"millis" : 680,
"indexBounds" : {
"PeerGroup" : [
[
"anonymous",
"anonymous"
]
],
"CategoryIds" : [
[
BinData(3,"BXzpwVQozECLaPkJy26t6Q=="),
BinData(3,"BXzpwVQozECLaPkJy26t6Q==")
]
]
},
"server" : "db02:27017"
Run Code Online (Sandbox Code Playgroud)
}
我认为680ms并不是那么快.或者这可以接受吗?另外,为什么说"indexOnly:false"?
问题是:我们有一个非常复杂的搜索查询.如果其结果产生的行太少,我们通过使用相同查询的不太严格的版本UNIONing查询来扩展结果.
我们正在讨论一种不同的方法是更快和/或更好的质量.我们将创建一个自定义sql函数,而不是UNIONing,它将返回匹配的分数.然后我们可以简单地按匹配分数排序.
关于性能:它会比UNION慢吗?
我们使用PostgreSQL.
任何建议将不胜感激.
非常感谢Max
c# ×2
mongodb ×2
.net ×1
asp.net-core ×1
indexing ×1
logging ×1
nhibernate ×1
performance ×1
postgresql ×1
sql ×1
xunit ×1