EF6フレームワークを使用する場合、1つのDbContextクラスと複数のパフォーマンスの影響を理解しようとしています。私たちはこのような簡単なDbContextを持っている場合DbContextでクエリが実行されるタイミング
たとえば、:
public class CarService
{
public List<Car> Cars { get; private set; }
public CarService()
{
var dbContext = new MainDbContext();
Cars = dbContext.Cars.ToList();
}
}
時:
public class MainDbContext : DbContext
{
public DbSet<Car> Cars { get; set; }
public void AddCar(Car car)
{
Cars.Add(car);
SaveChanges();
}
}
を今、私たちは、私は次のように述べDbContextを使用するサービスを持っているとしましょうどの時点でDbContextはデータベースにアクセスし、データベースに格納されているすべての車を取得しましたか?私がvar dbContext = new MainDbContext();
と呼んだとき、それともCars = dbContext.Cars.ToList();
と呼んだときでしたか?
前者の場合、100個のテーブルを含むDbContextがある場合、DbContextの作成時に100個のテーブルすべてがクエリされますか?
「DbContextはいつの時点でデータベースに格納され、データベースに格納されているすべての車を取得しましたか?」そのコードでは、決して。 DBContextの 'Cars'プロパティは' DbSet ' –
Gusman
の型でなければなりません。' DbSet 'であっても、明示的にそのようなものを呼び出すことによってデータベースからデータをフェッチします'ToList()' 'Cars'自体は何もしません。エンティティのコンテナですが、そうしなければすべてのデータを保持しているわけではありません。 Linqで 'IQueryable'を使用すると、データは列挙子を評価するときや、コンテキストを介して基礎となる接続に対してSQL文を実行するときにのみ取得されます。 –
xxbbcc