我试图模拟顶级(不是任何部分的一部分)配置值(.NET Core 的 IConfiguration),但徒劳无功。例如,这些都不起作用(使用 NSubstitute,但它与 Moq 或我相信的任何模拟包相同):
var config = Substitute.For<IConfiguration>();
config.GetValue<string>(Arg.Any<string>()).Returns("TopLevelValue");
config.GetValue<string>("TopLevelKey").Should().Be("TopLevelValue"); // nope
// non generic overload
config.GetValue(typeof(string), Arg.Any<string>()).Returns("TopLevelValue");
config.GetValue(typeof(string), "TopLevelKey").Should().Be("TopLevelValue"); // nope
Run Code Online (Sandbox Code Playgroud)
就我而言,我还需要GetSection从同一个配置实例调用。
我知道这是非常新的,但我想用Visual Studio创建一个使用aurelia的原型.VS支持位于漏斗中,但当前文档基于node.js等.根据现有文档,我没有任何线索.我希望我能得到一些指导......
我有一个父子表关系.在存储库中,我这样做:
return (from p in _ctx.Parents
.Include( "Children" )
select p).AsQueryable<Parent>();
Run Code Online (Sandbox Code Playgroud)
然后在过滤器中,我想通过子ID列表过滤父项:
IQueryable<Parent> qry; // from above
List<int> ids; // huge list (8500)
var filtered =
from p in qry.Where( p => p.Children.Any(c => ids.Contains(c.ChildId)) ) select s;
Run Code Online (Sandbox Code Playgroud)
我的ID列表很大.这会生成一个简单的SQL语句,它具有一个巨大的id"in(1,2,3 ...)"列表,但它本身不需要花费很多时间.然而,EF只需要整整一分钟来生成语句.我通过设置断点并调用来证明这一点:
((ObjectQuery<Parent>)filtered).ToTraceString();
Run Code Online (Sandbox Code Playgroud)
这需要所有的时间.这是我上一次linq声明中的问题吗?我不知道在(ids)中执行相当于Child.ChildId的任何其他方法.即使我的linq陈述不好,这个世界应该如何花这么长时间?
首先使用EF5数据库.在创建我的上下文中,我设置ContextOptions.LazyLoadingEnabled到true.有些事情发生了变化false(我们的代码中没有任何地方更改了设置).
在各个方面,我正在检查它是否仍然true使用这段代码(从实体对象获取上下文).该问题仅在运行多个线程时显示(加载一些实体,然后通过多线程代码传递它们).它不会出现在代码中的任何一致点上,因此无法确定究竟是什么导致它.
我想我只是希望有人可能对EF的内部运作有更多的了解并给我一些线索......
在 cypress 测试中,我需要通过调用外部 API 来验证操作。API 调用将始终返回结果(来自某些先前的运行),因此我不能简单地调用一次并验证结果。我需要重试几次,直到找到与当前运行相匹配的整体超时/失败。获得当前结果所需的时间差异很大;我真的不能在这个电话之前放一个疯狂的漫长等待。
请参阅下面片段中的评论;一旦我在循环中尝试请求,它就永远不会被调用。我使用cy.wait. 我也不能将实际请求包装在另一个返回Cypress.Promise或类似的函数中,这只会将问题向上推一个堆栈帧。
Cypress.Commands.add("verifyExternalAction", (someComparisonValue) => {
const options = {
"url": some_url,
"auth": { "bearer": some_apikey },
"headers": { "Accept": "application/json" }
};
//// This works fine; we hit the assertion inside then.
cy.request(options).then((resp) => {
assert.isTrue(resp.something > someComparisonValue);
});
//// We never enter then.
let retry = 0;
let foundMatch = false;
while ((retry < 1) && (!foundMatch)) {
cy.wait(10000);
retry++;
cy.request(options).then((resp) => {
if (resp.something > someComparisonValue) { …Run Code Online (Sandbox Code Playgroud) 我已经宣布了这样一个元组:
module MyModule =
let private INVALID_TUPLE = ("0", DateTime.MinValue)
Run Code Online (Sandbox Code Playgroud)
当我在模块中引用它时,它总是为null:
let private invalidForNone someOtherTuple =
match someOtherTuple with
| None -> INVALID_TUPLE // it's null
| Some(t) -> t
Run Code Online (Sandbox Code Playgroud)
此外,当我在元组声明上放置一个断点时,它永远不会命中.
如果我在脚本(fsx)文件中执行完全相同的操作,启动调试,执行,元组声明命中的断点以及对元组的引用是好的.
ILSpy for my module显示生成了一些启动代码,其中包含一个创建INVALID_TUPLE的Main方法.显然,这不是出于某种原因运行?
这是一个重现行为的示例(现在我意识到它与MSTest执行代码的方式有关).从C#单元测试中调用它; 结果将为null.实际上,F#代码中的断点根本不会执行.
module NullTupleTest
open System
let private INVALID_TUPLE = ("invalid", DateTime.MinValue)
let private TupleTest someTuple =
match someTuple with
| None -> INVALID_TUPLE
| Some(dt) -> dt
let Main = TupleTest None
Run Code Online (Sandbox Code Playgroud) 我已经创建了一个示例项目来简化我的问题.我有这个简单的处理程序:
public class HandleThis : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest( System.Web.HttpContext context )
{
// Score.aspx just says "success"
context.Response.Redirect( "Score.aspx" );
}
public bool IsReusable { get { return true; } }
}
Run Code Online (Sandbox Code Playgroud)
然后,在我的配置中,我有这个:
<httpHandlers>
<add verb="*"
path="Survey"
type="HttpHandlerTest.HandleThis, HttpHandlerTest" />
Run Code Online (Sandbox Code Playgroud)
现在,当我点击http:// server/Survey我的处理程序触发时.
如果我将项目更改为使用IIS 6运行,则不会触发(404).我尝试通过以下方式在IIS中手动添加处理程序: - 网站属性 - 主目录 - 配置 - 添加(浏览到我的网站的.dll),扩展:调查,取消选中"验证文件是否存在"
我注意到IIS(如此有用)添加了"." 在我的扩展面前,所以我用"b.Survey"点击了网站; 仍然是404.
当然可以在IIS 6中添加处理程序吗?
以下代码段失败并显示错误:
OUTPUT INTO子句的目标表'dbo.forn'不能位于(主键,外键)关系的任何一侧.找到参考约束'FK_forn_prim'."
我只能通过禁用外键约束来使用输出?如何才能做到这一点?
IF OBJECT_ID ('dbo.forn') IS NOT NULL
begin
alter table dbo.forn drop constraint FK_forn_prim
DROP TABLE dbo.forn;
end
IF OBJECT_ID ('dbo.prim') IS NOT NULL
DROP TABLE dbo.prim;
go
CREATE TABLE dbo.prim (c1 int PRIMARY KEY);
CREATE TABLE dbo.forn (c1 int CONSTRAINT FK_forn_prim FOREIGN KEY (c1) REFERENCES dbo.prim(c1));
go
INSERT INTO dbo.prim
OUTPUT inserted.c1 INTO dbo.forn
SELECT 1;
Run Code Online (Sandbox Code Playgroud) 我目前只限于在EF4数据存储库上使用扩展方法; 我不能使用linq来EF.我正在努力做一个简单的3表连接工作.这是代码:
var query = _readOnlyRepository.All<Parent>()
.Where( p => p.Something == "something" )
.Join( _readOnlyRepository.All<Child>(), // Child entity
p => p.ParentID, // Parent Key
c => c.ChildId, // Child Key
( p, c ) => c ) // Projection
.Join( _readOnlyRepository.All<GrandChild>(),
c => m.ChildID,
g => g.GrandChildID,
( c, g ) => g )
.Select( joined => joined.Child.Whatever );
Run Code Online (Sandbox Code Playgroud)
这是(基本上)生成的SQL:
select c2.Whatever
from Parent p
inner join Child c on p.ParentId = c.ParentId
inner join GrandChild g on c.ChildId = …Run Code Online (Sandbox Code Playgroud) 考虑一下:
let hank = "hank"
let bill = "bill"
printfn "%A" hank // for breakpoint
Run Code Online (Sandbox Code Playgroud)
现在,如果我在VS2015中设置条件断点,条件为"hank = bill"(假设F#表达式),我收到以下错误:
断点的条件无法执行.条件是'hank = bill'.返回的错误是'断点条件必须求值为布尔运算'.
当条件是"hank == bill"(也许尝试C#表达式?)时,错误是:
断点的条件无法执行.条件是'hank == bill'.返回的错误是'运行时此时拒绝评估表达式.'.
c# ×2
f# ×2
linq ×2
.net-core ×1
asp.net ×1
aurelia ×1
cypress ×1
httphandler ×1
iis-6 ×1
libraries ×1
nsubstitute ×1
performance ×1
t-sql ×1
tuples ×1