C# asp.net mvc控制器中的异步操作

C# asp.net mvc控制器中的异步操作,c#,asp.net-mvc,json,entity-framework,C#,Asp.net Mvc,Json,Entity Framework,我目前正在处理一个ASP.NET MVC项目,我为该项目创建了一个带有操作方法的控制器,该方法将返回一个JsonResult。该操作基本上进入数据库,并根据传递给该操作的表名执行动态linq查询并返回所需表的行 我的操作方法如下所示: public async Task<JsonResult> FieldValues(string table) { using (DbEntities ctx = new DbEntities())

我目前正在处理一个ASP.NET MVC项目,我为该项目创建了一个带有操作方法的控制器,该方法将返回一个JsonResult。该操作基本上进入数据库,并根据传递给该操作的表名执行动态linq查询并返回所需表的行

我的操作方法如下所示:

public async Task<JsonResult> FieldValues(string table)
        {
            using (DbEntities ctx = new DbEntities())
            {                
                Type type = System.Reflection.Assembly.GetExecutingAssembly().GetType("MyWebApp.Models." + table);
                var query = ctx.Set(type).SqlQuery(string.Format("SELECT * FROM {0}", table));                               
                var data = await query.ToListAsync();               
                return Json(data, JsonRequestBehavior.AllowGet);
            }
        }
公共异步任务字段值(字符串表)
{
使用(DbEntities ctx=new DbEntities())
{                
Type Type=System.Reflection.Assembly.getExecutionGassembly().GetType(“MyWebApp.Models.”+表);
var query=ctx.Set(type).SqlQuery(string.Format(“SELECT*FROM{0}”,table));
var data=wait query.ToListAsync();
返回Json(数据,JsonRequestBehavior.AllowGet);
}
}
从视图中使用jquery($.get(…)调用此操作。。。 我试着调试这个操作,表被正确地传递,查询看起来还可以,但是从来没有到达return语句

这是我第一次使用异步操作方法,也是第一次使用“动态linq”

感谢您对我可能做错的事情的任何帮助

谢谢大家!

好的。。。找到了问题! 长话短说:我使用的DB表有一个与表本身同名的列。EF被“吓坏了”,在生成的类中重命名了列,并在末尾添加了1(类名AR15,创建的属性是AR151而不是AR15)。 由于这个原因,查询以静默方式失败(没有例外)-我只是在为$.get承诺添加done和fail方法时看到了它。解决方案是在模型中手动创建一个新实体,该实体具有我所需的结构,这对于所有表都是通用的。 一旦完成了,代码就像一个符咒一样工作,我甚至删除了反射,因为我已经知道了实体类型(新创建的类型)


谢谢你的帮助和建议

是否有返回给调用方的任何内容(jQuery
$.get
调用)?如果进行同步调用(删除
async
并调用
ToList
而不是
ToListAsync
),是否成功?否,由于控制器中的操作方法不返回,因此未到达my$.get调用中的成功方法。这很奇怪,但我不能在查询对象上调用ToList-只有ToListSync可用…这些表有多大?如果您临时将查询修改为“从{0}中选择TOP 1*”,您的控制器是否派生自
AsyncController
?经过一段时间的调试(决定使用可用于$.get返回的jquery承诺的done和fail方法),我看到调用失败的消息是:“数据读取器与指定的'DataModel.AR15'不兼容。”。“AR151”类型的成员在数据读取器中没有同名的对应列。“-现在我只需要理解此消息并修复它:)EF没有受到惊吓。C#不允许类型成员与声明类型同名。