Lazy loading?
실제적으로 데이타를 액세스하는 시점은 반복적으로 데이블이나 엔터터의 데이타를 변수에 바인딩하는 시점입니다. 테이블이나 엔터티를 매핑하는 시점이 아니라는 것입니다. 기본적으로 LINQ는 Lazy loading 기법을 사용합니다.
Categories, Products 테이블 사이에는 one-to many 관계를 형성합니다.
Categories 는 하나 또는 그 이상의 Products 을 가지고 있습니다. Categories 테이블이 메모리로 loading 될 때에 Products 테이블은 load 되지 않습니다. Products 테이블이 메모리로 로드되는 시점은 특정 Categories 테이블에 해당하는, 즉 조건에 맞는 Products 테이블의 테이타를 반복적으로 찾을 때입니다.
1. Console Application 을 생성합니다.
실행시 결과 화면입니다.
2. [추가] => [새항목] => [LINQ to SQL 클래스] 선택, 이름은 NorhwindDB.dbml 로 입력합니다.
그리고, Categories, Products 테이블을 선택해서 끌어다 놓습니다.([서버 탐색기] 에 데이타베이스가 연결되어 있어야 합니다.). 최종 화면은 맨 위에 있는 그림과 같이 one-to-many 관계로 연결되어 있습니다.
3. Program.cs 파일의 Main 함수를 다음과 같이 변경합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | static void Main( string [] args) { using (NorhwindDBDataContext dbContext = new NorhwindDBDataContext()) { dbContext.Log = Console.Out; foreach (Categories categories in dbContext.Categories) { Console.WriteLine( "Category Name = {0}" ,categories.CategoryName); foreach (Products products in categories.Products) { Console.WriteLine( "\t" + products.ProductName); } Console.WriteLine(); } } Console.ReadKey(); } |
소스 파일 :
'C# with LINQ to SQL' 카테고리의 다른 글
lazy loading과 eager loading 의 차이점 (0) | 2015.08.11 |
---|---|
Eager loading (0) | 2015.08.10 |
SqlMetal 을 이용해서 dbml 파일 만들기 (0) | 2015.07.15 |
LINQ - out 파라미터를 이용한 스토어드 프로시저 이용 (0) | 2015.07.09 |
LINQ - 스토어드 프로시저를 이용한 insert, update, delete 연산 (0) | 2015.07.07 |