Error CS0103:名称'db'未在当前上下文存在,多表视图实现受阻
解决Error CS0103: 名称'db'在当前上下文中不存在的问题
咱们直接说核心问题:你在控制器的Index方法里直接用了db这个变量,但根本没声明或者实例化它,编译器自然找不到这个名称啦。另外你的代码里还有几个小拼写错误,也得一起修正。
具体修复步骤:
- 第一步:实例化你的数据库上下文
你的KMSConection是继承自ApplicationDbContext的数据库上下文类,所以在使用它之前,需要先创建一个实例。在Index方法里添加一行:var db = new KMSConection(); - 第二步:修正拼写错误
- 把
Tolist()改成ToList()(C#里方法名是大写开头的) - 把
select or改成select o(这里明显是手误打错了变量名)
- 把
- 第三步:用using语句管理上下文(可选但推荐)
为了避免数据库连接资源泄漏,最好用using语句包裹上下文实例,确保它能被正确释放。
修正后的控制器代码:
using System.Linq; using System.Web.Mvc; using KMS.Models; namespace KMS.Controllers { public class KMSController : Controller { public ActionResult Index() { using(var db = new KMSConection()) { KMSConection cs = new KMSConection(); cs.Areas = (from o in db.Areas select o).ToList(); cs.AreaTypes = (from o in db.AreaTypes select o).ToList(); return View(cs); } } } }
额外小建议:
你的KMSConection类作为数据库上下文,命名可以更规范一点,比如改成KMSDbContext,这样其他开发者一看就知道它的作用。另外,其实你可以单独创建一个纯ViewModel类(不继承DbContext)来承载查询结果,这样更符合MVC的分层设计,不过你现在的写法也能正常运行。
内容的提问来源于stack exchange,提问作者Cristian R
相关产品推荐
相关产品推荐

