当我在SQL Management Studio中运行以下存储过程时,它按预期运行,大约需要5分钟才能完成。通过实体框架无法正确执行存储过程
exec [dbo].[sproc] '2016-02-01', '2016-02-29'
但是,使用实体框架运行时,它似乎需要1秒,并没有真正做它应该做的,即使我传递相同的参数
难道这是一个配置问题?
我传递的连接字符串名称为DbContext
构造函数和上面是在一个线程因超时运行
new Thread(new ThreadStart (delegate()
{
using (var context = new MyDbContext())
{
var d1 = new SqlParameter("Date_From", dateFrom);
var d2 = new SqlParameter("Date_To", dateTo);
int result = context.Database.ExecuteSqlCommand("exec [dbo].[sproc] @Date_From, @Date_To", d1, d2);
}
})).Start();
- 更新 -
存储过程需要一个日期时间,虽然我可以在本地使用字符串运行它(它会将其转换为日期时间),但它不会通过ExecuteSqlCommand运行,除非我将参数作为DateTimes传递。当然,如果我传递一个日期时间参数,它应该知道哪些是几天,几个月和几年?
ALTER PROCEDURE [dbo].[sproc]
(
@Date_From AS DATETIME,
@Date_To AS DATETIME
)
- 更新 -
正在执行通过SQL事件探查器
exec sp_executesql N'exec [dbo].[sproc] @Date_From, @Date_To',N'@Date_From datetime,@Date_To datetime',@Date_From='2016-02-01 00:00:00',@Date_To='2016-02-29 00:00:00'
检查时,如果我运行这个手动SQL Server管理下,我得到以下错误:
Error converting data type varchar to datetime.
User/Security/DB S ettings?
你能够得到在数据库上运行的分析器并查看哪些查询被EF传递? – Jay
@Jay它似乎是铸造到一个nvarchar? (我认为)@ @ Date_From = N'29/02/2016',@ Date_To = N'01/02/2016'' – iswinky
@Jay如果我在sql管理上运行它,它会运行'exec [dbo]。[sproc] '01 -02-2016','29 -02-2016'' – iswinky