C# 当MVC使用SQL2014介入EF6调用时,VS2013轰然倒塌
我有一个MVC5项目,分为一个主XXXX.站点和一个XXXX.数据dll,其中EF6连接到MS-SQL 2014数据库 当我在MVC控制器上,在XXXX.Data dll中运行的调用中按F10时,一切都很顺利。如果我进入DLL代码并在实际的EF调用上设置断点,VisualStudio就会崩溃 我尝试过不同的方法,比如重新添加EF6.1.1.1,我在DLL和MVC站点上都尝试过,但都没有效果。我尝试删除,然后完全添加EF。我尝试了一个新的项目,只是把代码运行一个简单的存储过程,我甚至试图将Data.dll合并到MVC站点代码移动所有数据库访问MVC站点主要删除了dll本身…但没有任何效果 到目前为止,我注意到: 1如果我在为调用此存储过程而编写的代码上设置断点,Visual Studio就会崩溃C# 当MVC使用SQL2014介入EF6调用时,VS2013轰然倒塌,c#,asp.net-mvc,entity-framework,entity-framework-4,entity-framework-5,C#,Asp.net Mvc,Entity Framework,Entity Framework 4,Entity Framework 5,我有一个MVC5项目,分为一个主XXXX.站点和一个XXXX.数据dll,其中EF6连接到MS-SQL 2014数据库 当我在MVC控制器上,在XXXX.Data dll中运行的调用中按F10时,一切都很顺利。如果我进入DLL代码并在实际的EF调用上设置断点,VisualStudio就会崩溃 我尝试过不同的方法,比如重新添加EF6.1.1.1,我在DLL和MVC站点上都尝试过,但都没有效果。我尝试删除,然后完全添加EF。我尝试了一个新的项目,只是把代码运行一个简单的存储过程,我甚至试图将Data
try
{
using (MyDB db = new MyDB())
{
// IF BREAKPOINT IS ON LINE BELOW, EXECUTION STOPS ABRUPTLY
db.MyStoredProc(value1, value2);
}
}
catch (Exception ex)
{
string s = ex.Message;
return false;
}
没有引发异常,当它发生时,浏览器会闪烁几次。然后,此消息出现在输出窗口上:
XXXX.Data.dll中发生类型为“System.AccessViolationException”的第一次意外异常
2如果我将断点放在实际自动生成的EF6代码中,则程序不会正常运行
public virtual int MyStoredProc(string value1, string value2)
{
var value1Parameter = value1 != null ?
new ObjectParameter("Value1", value1) :
new ObjectParameter("Value1", typeof(string));
var value2Parameter = value2 != null ?
new ObjectParameter("Value2", value2) :
new ObjectParameter("Value2", typeof(string));
// IF BREAKPOINT IS ON LINE BELOW, EXECUTION RUNS NORMALLY
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("MyStoredProc", value1Parameter, value2Parameter);
}
注意,我在bin文件夹MVC和DLL上都有EntityFramework和EntitySQLServer DLL
问题:
这是SQL2014的问题吗?连接到SQL2012时,我不会发生这种情况。
是否有显示实际发生异常的设置?
为什么VS爆炸而不是显示实际错误?我在使用输出参数为“Date”类型的SQL Server存储过程时,遇到了此尝试读取或写入受保护内存异常错误。我尝试了各种各样的事情,但都没有成功,为了时间的利益,我决定采用以下解决方案 1从存储过程中删除日期类型的输出参数 2改为通过存储过程中的select语句返回字符串
SELECT CONVERT(char(10), @AsOfDate, 20) AS AsOfDate
3将存储过程返回的字符串转换为C中的日期时间值
DateTime asOfDate = DateTime.Now;
using (var context = new DA.MyEntities())
{
var procResult = context.myStoredProcedure(myParameter).FirstOrDefault();
DateTime.TryParse(procResult, out asOfDate);
}
我对这个折衷方案不太满意,但它确实让我向前迈进了。Using语句没有打开连接。对数据库的调用不起作用。db.MyStoredProcvalue1,value2在连接关闭时打开连接。这里也有同样的问题。我在实体代码中放置了一个断点,它甚至会在进入EF6方法之前抛出异常。如果我从方法中删除virtual关键字,它将运行。似乎没有覆盖。我在entity context.cs文件中添加了一个非虚拟NV签名,将其链接到重命名为*2的原始文件。它仍然抛出。