今天我遇到了一个问题,我的查询失败了。我正在使用db.Database.SqlQuery<T>()
来查询其他应用程序数据。我们对其数据有自定义视图。今天,管理员重建了软件中的索引,并在此过程中删除了自定义视图。虽然这是SO无法解决的问题,但您可以帮助的问题是优雅地处理视图不再存在的情况。
对于主应用程序,我们将此数据用作补充数据。这意味着如果无法访问服务器或表,则显示信息并不重要。该查询在以下WebApi操作中运行(我在调试时根据我的观察添加了一些注释。):
public Task<HttpResponseMessage> GetByAddress(string id)
{
Task<HttpResponseMessage> response;
string sql = // my sql statement;
List<object> parameterList = new List<object>();
parameterList.Add(id.ToUpper());
object[] param = parameterList.ToArray();
// This is worthless since the following line will completely replace this
IEnumerable<CallsForService> calls = new List<CallsForService>();
// If the table does not exist, this does not throw an error, instead it creates a different object with the error details.
calls = db.Database.SqlQuery<CallsForService>(sql, param);
response = Task.FromResult<HttpResponseMessage>(Request.CreateResponse(HttpStatusCode.OK, calls));
return response;
}
我的问题是如何检查这些错误,并至少优雅地向调用应用程序发送一个空列表。然后我可以用ELMAH记录这些错误,这样我就能解决问题并修复它。
答案 0 :(得分:0)
在枚举结果之前不会执行查询,因此您只需计算返回的记录数,如果有则会引发错误。
calls = db.Database.SqlQuery<CallsForService>(sql, param);
var recCount = calls.Count();
在最后一行之后引发的任何错误都将被try / catch块捕获。