在我的应用程序中,有时需要在一次操作中将10,000行或更多行保存到数据库中.我发现简单地迭代并一次添加一个项目可能需要花费半个多小时.
但是,如果我禁用AutoDetectChangesEnabled它需要约5秒(这正是我想要的)
我正在尝试向DbSet创建一个名为"AddRange"的扩展方法,该方法将禁用AutoDetectChangesEnabled,然后在完成时重新启用它.
public static void AddRange<TEntity>(this DbSet<TEntity> set, DbContext con, IEnumerable<TEntity> items) where TEntity : class
{
// Disable auto detect changes for speed
var detectChanges = con.Configuration.AutoDetectChangesEnabled;
try
{
con.Configuration.AutoDetectChangesEnabled = false;
foreach (var item in items)
{
set.Add(item);
}
}
finally
{
con.Configuration.AutoDetectChangesEnabled = detectChanges;
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:有没有办法从DbSet获取DbContext?我不喜欢把它作为参数 - 感觉它应该是不必要的.
我已经从vs2012 pro上的ReSharper 7升级到vs2013 pro上的ReSharper 8.1,而ReSharper现在警告我很多我的部分视图无法解决.它似乎只发生了:
例如Home.Master
,位于〜/ Views/Home/Home.Master渲染中UserProfile.ascx
,位于〜/ Views/Home/UserProfile.ascx中.双方<%: Html.RenderPartial("UserProfile") %>
并<%: Html.RenderPartial("~/Views/Home/UserProfile.ascx"%>
通过ReSharper的标志为无效.
另外,当我仅通过名称引用时,〜/ views/shared文件夹中的共享部分看起来很好用:
但是,通过路径引用视图似乎不起作用:
(注意:两张图片都是在Home.Master中拍摄的,在〜/ Views/Home中)
当我运行应用程序时,部分工作正常,所以它似乎是ReSharper 8.1中的一个变化.有什么办法可以解决这个问题吗?
我正在考虑在MVC中实现双因素身份验证,类似于Googles身份验证器.
由于一些用户不会有两个因素身份验证设置,我们要使用两个步骤 - 一个屏幕输入用户名和密码,另一个屏幕输入一次性密码.
我的难点是如何在输入一次性密码时安全地存储用户的用户名和密码?目前我们收到密码并立即拒绝或发出cookie,因此我们不会将密码存储在任何地方.但是,通过两步,我们无法立即发出cookie,因为用户可以直接导航到另一个操作.同样,我不想将密码作为表单中的隐藏元素发回给用户.
这种情况的标准做法是什么?
我能想到的最好的方法是在会话中存储用户名和密码,但我不确定它有多安全.
我最近采用了构建工具Cake,但我很难获得在TeamCity中显示的DotCover单元测试覆盖率报告.
我尝试过以下任务:
Task("Run-Regression-Tests")
.IsDependentOn("Build")
.Does(() =>
{
var resultPath = artifactsDirectory + File("results.dcvr");
DotCoverCover(tool =>
{
tool.NUnit3(new[] {
"./Foo.UnitTests/bin/" + configuration + "/Foo.UnitTests.dll",
"./Bar.UnitTests/bin/" + configuration + "/Bar.UnitTests.dll",
"./Baz.IntegrationTests/bin/" + configuration + "/Baz.IntegrationTests.dll"
}, new NUnit3Settings {
NoResults = true
});
},
resultPath,
new DotCoverCoverSettings()
.WithFilter("+:Foo.Domain"));
TeamCity.ImportDotCoverCoverage(resultPath);
});
Run Code Online (Sandbox Code Playgroud)
但是,这会产生TeamCity的以下输出:
// Output immediately after unit test success report:
[03:01:52][Step 1/1] [JetBrains dotCover] Coverage session finished [30/09/2017 03:01:52]
[03:01:52][Step 1/1] [JetBrains dotCover] Coverage results post-processing started [30/09/2017 03:01:52]
[03:01:53][Step 1/1] …
Run Code Online (Sandbox Code Playgroud)