上下文类如何在asp.net mvc中运行?它如何从数据库加载所有数据以进一步使用?

时间:2016-02-24 10:10:21

标签: c# asp.net-mvc

我只是想知道Context类是如何工作的。它是在编译时加载所有数据还是在运行时加载必要的数据。因为我总是创建上下文类对象来访问数据或将数据存储到数据库。这是一个简单的代码,用于解决问题:

StudentContext db = new StudentContext();

public ActionResult Index()
{
    ViewBag.student = db.students.ToList();

    return View();
}

OR

var check = db.users.Where(w=>w.UserName.ToLower()==user.UserName.ToLower());

2 个答案:

答案 0 :(得分:2)

  

我是ASP.NET MVC的新手。我只是想知道Context类是如何工作的。

ASP.NET MVC没有Context类。你的意思是实体框架的上下文类。 ASP.NET没有具体的内容 - 很像你从未问过的问题"手机如何在梅赛德斯汽车中工作"因为你的手机工作方式不依赖于你的车。

  

它是否在编译时加载所有数据

在COMPILE时加载数据有多么愚蠢?如果数据在应用程序运行时发生变化怎么办?大多数数据库都存在要编辑的数据。

  

或在运行时加载必要的数据。

哪个更有意义,或者?因为想象 - 人们,特别是多个用户,可能会改变数据。预加载是有问题的 - 特别是如果你在ocmpile时这样做。使用非平凡的应用程序 - 即使是为网页分发编译(预编译也是一种功能) - 这意味着

  • 程序可能在编译时加载数百GB的数据
  • 可能已有几个月了。

的UPS。完全没有意义。这就是为什么事情不能像这样工作的原因。

  • 每个上下文都有自己的已加载数据缓存
  • 不要让它们存在(一般来说,静态dbcontext是一个坏主意。在非常罕见的情况下这是有意义的。)
  • 他们根据需要加载数据。如果/当您执行查询时,尤其如此,当您按照导航属性时,也会延迟加载。

同样,这与MVC无关 - 这是我们谈论的实体框架,您可以在Web应用程序之外轻松使用它。

答案 1 :(得分:0)

DbContext课程是MS Entity Framework的一部分。这是一个对象关系映射器,它从LINQ表达式创建SQL语句,并使用它们在运行时访问数据库。另请参阅LINQ to Entities