在MVC3中实例化EntityFramework的DbContext时,整个数据库是否被读取?在调试时,可以通过查看实例化的DbContext来访问整个数据库中的所有数据,这样就不会暗示在第一次连接时抓取所有数据了吗?
答案 0 :(得分:3)
绝对没有。当您访问DbContext的DbSet / ObjectSet属性时,将加载数据。
只有您查询的数据是从数据库加载并映射到对象的。例如,当您查询
时DbContext.Table.Where(row => row.Prop1 == "Value")
将其翻译为SQL,在数据库中进行评估,只有与您的查询匹配的行才会返回到您的应用。
答案 1 :(得分:2)
不,实例化时不会读取整个数据库。 DbContext中的实体集合(DbSet<>)是惰性求值的。因此,当您进行调试并导航到一个时,它会被查询,而不是在实例化DbContext实例时。
答案 2 :(得分:1)
不,实体框架尝试仅在您需要信息时查询数据库,或者您需要修改信息。
以下示例是我对EF在幕后所做的个人解释。这可能有点不准确,但是出于说明的目的,这是一个重点。
using(var db = new MyDbContext()) // 1
{
var entities = db.MyEntities; // 2
foreach(var entity in entities) // 3
{
// 4
} // 5
} // 6