我遇到了一个问题,我遇到了EF和SQL。我有一个疯狂的存储过程,不能很好地转换为C#代码(EF / LINQ)。基本上,我所做的是使用SqlConnection和SqlCommand调用(System.Data.SqlClient)调用存储过程[见下文],然后使用EF从表中提取数据。这种情况一次又一次地发生,直到主表耗尽为止。 (我有一个包含数十万条记录的主表,存储的proc会将其中的一小部分拉出来并将其放入要处理的表中,一旦处理完毕,这些记录将从主表中删除,并且它会重新遍历,直到主表已经完全处理完毕)。
问题是该表永远不会在C#中更新,但它会在后端更新。
所以这是SQL调用:
SqlConnection sqlConn;
SqlCommand sqlCommand;
using (sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["AppMRIConnection"].ConnectionString))
{
using (sqlCommand = new SqlCommand(String.Format("EXEC sp_PullFinalDataSetPart '{0}', '{1}'", sLocation, sOutputFileType), sqlConn))
{
sqlConn.Open();
sqlCommand.ExecuteNonQuery();
sqlConn.Close();
}
}
截断FinalDataSetPart表并使用X个新记录重新加载它。
这是C#中的调用
List<FinalDataSetPart> lstFinalPart = db.FinalDataSetPart.ToList();
此调用将始终加载第一个finaldatasetpart表,而不管表中的实际内容是什么。该调用在循环中是正确的(我可以进入代码并看到它在每次循环迭代时调用该方法)。
有没有人见过这样的事情?!
任何想法/帮助/提示都会非常感激。
谢谢!
答案 0 :(得分:0)
当您提取新数据时,是否在临时表中更改了ID?如果主要ID没有改变,EF将不会检测数据的变化。
您是否在每次获取新数据时都重新创建上下文?