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

时间:2014-05-16 14:09:58

标签: c# asp.net-mvc json entity-framework

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

我的Action方法如下所示:

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);
            }
        }

使用视图中的jquery($ .get(...))调用此操作... 我试图调试动作,表格正确传递,查询似乎没问题,但是从未到达return语句!

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

对我可能做错的任何帮助表示赞赏!

谢谢!

1 个答案:

答案 0 :(得分:0)

好的......发现了这个问题! 长话短说:我使用的数据库表有一个与表本身同名的列。 EF得到了惊吓&#34;并在生成的类中重命名该列,并在末尾添加1(类名AR15,创建的属性为AR151而不是AR15)。 因此,查询失败了(没有例外) - 我刚刚在$ .get promise中添加了done和fail方法时看到了它。解决方案是在模型中手动创建一个具有我需要的结构的新实体,这对于所有表都是通用的。 一旦完成,代码就像魅力一样,我甚至删除了反射,因为我已经知道实体类型(新创建的)。

感谢您的帮助和建议!