我有一个使用Entity Framework 6处理数据库的MVC站点,我一直在尝试更改它,以便所有内容都作为异步控制器运行,并且对数据库的调用作为异步对应项运行(例如ToListAsync())而不是ToList())
我遇到的问题是,简单地将我的查询更改为异步会导致它们非常慢.
以下代码从我的数据上下文中获取"Album"对象的集合,并转换为相当简单的数据库连接:
// Get the albums
var albums = await this.context.Albums
.Where(x => x.Artist.ID == artist.ID)
.ToListAsync();
Run Code Online (Sandbox Code Playgroud)
这是创建的SQL:
exec sp_executesql N'SELECT
[Extent1].[ID] AS [ID],
[Extent1].[URL] AS [URL],
[Extent1].[ASIN] AS [ASIN],
[Extent1].[Title] AS [Title],
[Extent1].[ReleaseDate] AS [ReleaseDate],
[Extent1].[AccurateDay] AS [AccurateDay],
[Extent1].[AccurateMonth] AS [AccurateMonth],
[Extent1].[Type] AS [Type],
[Extent1].[Tracks] AS [Tracks],
[Extent1].[MainCredits] AS [MainCredits],
[Extent1].[SupportingCredits] AS [SupportingCredits],
[Extent1].[Description] AS [Description],
[Extent1].[Image] AS [Image],
[Extent1].[HasImage] AS [HasImage],
[Extent1].[Created] AS [Created],
[Extent1].[Artist_ID] AS [Artist_ID]
FROM [dbo].[Albums] AS [Extent1]
WHERE [Extent1].[Artist_ID] = @p__linq__0',N'@p__linq__0 …Run Code Online (Sandbox Code Playgroud) 我正在使用MVC 6,并希望能够从我的所有Razor视图全局访问特定的命名空间.在MVC 5中,这很简单; 我只是将以下代码添加到我的~/views/web.config文件中:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.1.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="MyProject.WebUI" />
<add namespace="MyProject.WebUI.Helpers" /><!-- Added this line -->
</namespaces>
</pages>
</system.web.webPages.razor>
Run Code Online (Sandbox Code Playgroud)
我添加了对MyProject.WebUI.Helpers命名空间的访问权限.
在ASP.NET 5中,因此在MVC 6中,该web.config文件已被废除,所以我不知道该如何继续这样做.我试过寻找答案,但我能找到的只是在当前版本的ASP.NET而不是v5中如何做到这一点.
有任何想法吗?
编辑:说明web.config我将使用哪个文件.
我有一个类看起来像这样的属性:
[AllowHtml]
[DataType(DataType.MultilineText)]
public string Description { get; set; }
Run Code Online (Sandbox Code Playgroud)
我已经放入了[AllowHtml]属性,让我通过我构建的表单向这个属性提交HTML,但我想要做的是输出属性的值作为原始HTML而不进行转义.
我知道我可以使用,Html.Raw(Model.Description)但我正在寻找的是一种告诉Html.DisplayFor(m => m.Description)我始终输出原始HTML的方法.是否有一个属性可以用来装饰我班级的属性,我希望这样做?
基本上我是懒惰 - 我不想要记住哪些属性可能包含HTML,所以我不想Html.Raw(…)在我需要做上述时考虑使用- 我很多而不是我的模型知道什么它应该做并自动完成.我试过寻找答案,但要么我没有正确地说它或者没有办法做到这一点:(
谢谢,
我正在使用ASP.net MVC 5创建一个新的网站,它也将使用Web API 2进行API.过去我使用Ninject来处理依赖注入,但它似乎总是使用Web API有点不稳定.
我已经看过Ninject网站了,看起来好像没有MVC 5的插件(除非MVC 3仍在使用?)并且没有太多关于将它与MVC 5一起使用(不是那样的)无论如何我都能找到.
所以我想知道推荐的方法对于使用MVC 5和Web API的依赖注入是什么?现在有什么内置的,还是我还需要使用第三方解决方案?那里有没有教程?
谢谢!
我想补充授权属性,我的一些MVC4控制器,他们罚款,只要它是一个计划工作[Authorize]或[Authorize(Users="myuser")],但第二次我在任何类型的过滤作用,它的加入分崩离析,例如.[Authorize(Roles="admin")].然后我开始得到如下错误:
'/'应用程序中的服务器错误.
建立与SQL Server的连接时发生与网络相关或特定于实例的错误.服务器未找到或无法访问.验证实例名称是否正确,以及SQL Server是否配置为允许远程连接.(提供程序:SQL网络接口,错误:26 - 查找指定的服务器/实例时出错)
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
SQLExpress数据库文件自动创建错误:
连接字符串使用应用程序的App_Data目录中的数据库位置指定本地Sql Server Express实例.提供程序尝试自动创建应用程序服务数据库,因为提供程序确定数据库不存在.要成功检查应用程序服务数据库是否存在并自动创建应用程序服务数据库,必须满足以下配置要求:
如果应用程序在Windows 7或Windows Server 2008R2上运行,则需要执行特殊配置步骤才能自动创建提供程序数据库.有关其他信息,请访问:http://go.microsoft.com/fwlink/?LinkId = 160102.如果应用程序的App_Data目录尚不存在,则Web服务器帐户必须具有对应用程序目录的读写权限.这是必要的,因为Web服务器帐户将自动创建App_Data目录(如果它尚不存在).如果应用程序的App_Data目录已存在,则Web服务器帐户仅需要对应用程序的App_Data目录的读写访问权限.这是必要的,因为Web服务器帐户将尝试验证应用程序的App_Data目录中是否已存在Sql Server Express数据库.从Web服务器帐户撤消对App_Data目录的读取访问将阻止提供程序正确确定Sql Server Express数据库是否已存在.当提供程序尝试创建现有数据库的副本时,这将导致错误.需要写访问权限,因为在创建新数据库时会使用Web服务器帐户的凭据.必须在计算机上安装Sql Server Express.Web服务器帐户的进程标识必须具有本地用户配置文件.有关如何为计算机和域帐户创建本地用户配置文件的详细信息,请参阅自述文档.
来源错误:
在执行当前Web请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息.
堆栈跟踪:
[SqlException(0x80131904):建立与SQL Server的连接时发生与网络相关或特定于实例的错误.服务器未找到或无法访问.验证实例名称是否正确,以及SQL Server是否配置为允许远程连接.(提供程序:SQL网络接口,错误:26 - 错误定位指定的服务器/实例)]
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常,布尔breakConnection,操作1重试,DbConnectionOptions userOptions,DbConnectionInternal&connection)+5311874 System.Data .ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource 1 retry)+83 System.Data.SqlClient.SqlConnection.Open()+96 System.Web.Management.SqlServices.GetSqlConnection(String server,String user,String password) ,布尔值信任,String connectionString)+761 wrapCloseInAction) +5295167 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +242
System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean …
假设我有几个减速器功能,我将它们全部组合成一个减速器使用combineReducers(...),有没有办法测试组合减速器实际包含哪些减速器?
例如,如果我有这个:
import { combineReducers } from 'redux'
const reducer1 = (state, action) => {...}
... (more reducers, etc)
const rootReducer = combineReducers({
reducer1,
reducer2,
reducer3
})
export default rootReducer
Run Code Online (Sandbox Code Playgroud)
我可以使用Mocha和Expect.js编写测试,以便检查rootReducer包含是否说出来reducer2?这甚至可能吗?
我目前设置项目的方式是每个reducer都在一个单独的文件中,然后导入到文件中,该combineReducers(...)函数用于将它们全部组合在一起.我正在测试所有单独的减速器,以检查它们是否应该做到,但我也认为测试组合式减速器以确保它包含所有其他减速器是个好主意(如果我忘记了例如添加一个).
谢谢
我正在尝试为React应用程序添加单元测试,并希望测试React Router(2.0.1)提供的路由.我想测试一下我提供的特定路径是否与路径匹配.我正在使用Mocha编写测试并期待.
我查看了React Router存储库中的文档,但我能看到的唯一测试指南是解释如何测试a <Link />以及如何渲染它.
说我有以下代码:
// import statements omitted for brevity
export const routes = (
<Route path="/" component={App}>
<IndexRoute component={Index} />
<Route path="/foo">
<IndexRoute component={FooIndex} />
<Route path="add" component={FooAdd} />
<Route path=":fooId" component={FooDetails} />
</Route>
</Route>
)
ReactDOM.render(
<Router history={browserHistory}>{routes}</Router>,
document.getElementById('app')
)
Run Code Online (Sandbox Code Playgroud)
如何测试routes变量中创建的路由是否与以下内容匹配:
但不是像以下路线:
基本上我想检查每个预期的URL格式是否有匹配它的路由,并且意外的URL与任何路由都不匹配.
我不感兴趣,在由路线呈现的元素,所以不希望我的基础上的测试检查具体的事情是否被渲染,只有一个匹配的路由发现和检查,这是在最好某种方式事实上预期的路线(我猜测检查组件的名称是什么?)
感谢任何帮助.
谢谢
我有一个项目,其中包含我从命令行使用Mocha运行的测试.我在我的设置了一个测试脚本,packages.json如下所示:
"test": "mocha ./**/*.spec.js --reporter dot --require jsdom-global/register"
我目前在Visual Studio Team Services中设置了一个简单的任务,它只运行npm test命令,它在控制台中运行Mocha并根据测试是否通过继续/失败构建.
我希望能够做的是让我的测试结果在运行后填充构建定义中的"测试"选项卡.就像我在C#代码上运行测试一样,我可以填充此选项卡.
我已经尝试过使用Chutzpah,但它过于复杂,似乎要求我跳过各种各样的箍,这意味着改变我的测试并编写长配置文件.我已经编写了大量的测试,所以真的不想这样做.当它最终发现我的任何测试时,它抱怨require和其他与Node模块有关的事情.
我要求的实际可能吗?有没有一种简单的方法来实现这与在Node中运行我的测试兼容?
unit-testing node.js azure-pipelines-build-task azure-pipelines
我有一个基于MVC 6(beta 3)的基本Web API控制器作为新ASP.NET项目的一部分.我遇到的问题是它不接受动词PUT或PATCH,并且每当我尝试使用这些方法访问URL时都会返回错误404.
这是我作为基本测试得到的:
namespace Test.Controllers
{
[Route("api/test")]
public class TestController : Controller
{
[HttpGet]
public string TestGet()
{
return "Hello from GET!";
}
[HttpPost]
public string TestPost()
{
return "Hello from POST!";
}
[HttpDelete]
public string TestDelete()
{
return "Hello from DELETE!";
}
[HttpPut]
public string TestPut()
{
return "Hello from PUT!";
}
[HttpPatch]
public string TestPatch()
{
return "Hello from PATCH!";
}
}
}
Run Code Online (Sandbox Code Playgroud)
访问http://localhost/api/test'Postman'来检查每个动词(GET,POST,DELETE,PUT和PATCH)的URL依次适用于GET,POST和DELETE,但是给出了带有PUT和PATCH的404.
编辑:
我记得有一种方法可以为MVC5及更低版本启用这些动词,包括禁用WebDAV并为这两个动词添加处理程序web.config,但由于没有像web.configASP.NET 5 这样的东西,我完全失去了如何解决这个问题.我假设它可能已经解决了config.json但是我所有尝试搜索这个都没有任何帮助! …
我已经使用 Entity Framework 设置了一个存储库,并具有以下接口方法:
Task<IList<Person>> SearchForPeople(Expression<Func<Person, bool>> predicate, Expression<Func<Person, object>> orderBy);
Run Code Online (Sandbox Code Playgroud)
这是相当基本的,我已将其实现为:
public async Task<IList<Person>> SearchForPeople(Expression<Func<Person, bool>> predicate, Expression<Func<Person, object>> orderBy)
{
return await this.context.People.Where(predicate).OrderBy(orderBy).ToListAsync();
}
Run Code Online (Sandbox Code Playgroud)
我目前这样称呼它:
var people = await repository.SearchForPeople(x => x.Born.Day == now.Day && x.Born.Month == now.Month, x => x.OrderingKey);
Run Code Online (Sandbox Code Playgroud)
它返回所有生日落在指定日期/月份的人,然后根据名为“orderingKey”的属性对他们进行排序,该属性本质上是他们的名字连接。
这工作正常,但如果我尝试将 orderby 更改为这样的:
var people = await repository.SearchForPeople(x => x.Born.Day == now.Day && x.Born.Month == now.Month, x => x.Born);
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息,说我无法将 System.DateTime 转换为 System.Object。我明白为什么会发生这种情况,因为我已经明确指出 orderby 属性应该是“对象”类型,但我看不出如何重写它,以便我的 orderby 接受任何类型的属性给 orderby,而无需使用通用 T,我真的不想这样做,因为我不想要一个通用存储库只是一个通用过滤器!
有没有另一种方法可以使两种类型的 orderby 都起作用?
c# ×3
asp.net ×2
asp.net-core ×2
mocha.js ×2
.net ×1
async-await ×1
asynchronous ×1
config.json ×1
expect.js ×1
javascript ×1
linq ×1
ninject ×1
node.js ×1
razor ×1
react-router ×1
reactjs ×1
redux ×1
unit-testing ×1