개발 이야기/ORM2012. 4. 15. 12:30

Entity Framework - Entity CRUD

이번에 알아 볼 내용은 Entity Framework의 실지적인 Entity CRUD입니다저희가 데이터를 가져와서 데이터를 생성하고 조회하고 수정하고 삭제하고!!!! 개발에 필수적으로 필요한 작업인데요이번에 엔티티를 가지고 와서 작업을 해보는 것을 살펴보겠습니다.

 

Entity 조회(Select)

엔티티 조회하는 것은 이미 앞 세션에서 설명을 들였습니다반복학습이 될거라 생각됩니다우선Northwind 데이터베이스를 연결하겠습니다.

06_01.jpg

[그림 6-1] DB 연결

 

저희가 간단히 CRUD기능을 살펴볼 예정이니 테이블 하나만 선택하겠습니다. Shippers 테이블을 선택해주세요!

06_02.jpg

[그림 6-2] 테이블 선택

 

자 엔티티를 가져왔다면 데이터를 조회하는 코드를 작성해보겠습니다개체 컨텍스트를 가져와서 그리드뷰에 뿌려줍니다컨텍스트에서 Shippers 엔티티를 조회하면 됩니다코딩은 간단하죠?

 

        private void btnSelect_Click(object sender, EventArgs e)

        {

            using (var context = new NorthwindEntities())

            {

                dataGridView1.DataSource = context.Shippers;

            }            

        }

 

 

06_03.jpg

[그림 6-3] 조회화면


Entity 수정(Update)

다음은 엔티티 수정입니다수정하려는 데이터를 조회해서 해당 엔티티 속성들 값을 수정합니다수정 후에 데이터베이스에 반영이 되려면 최종적으로 SaveChanges 메서드를 호출해줘야 합니다. SaveChanges는 데이터 소스인 데이터베이스와 엔티티 컨텍스트 사이에서 모든 업데이트 내용을 유지하면 추적 기능을 제공하고 있습니다.

 

        private void btnUpdate_Click(object sender, EventArgs e)

        {

            using (var context = new NorthwindEntities())

            {

                var shipper = context.Shippers.Where(p => p.ShipperID == 1).First();

                shipper.CompanyName = shipper.CompanyName + "_Modify";

                shipper.Phone = "(503) 555-9839";

                context.SaveChanges();

 

                dataGridView1.DataSource = context.Shippers;

            }

        }

 

 

06_04.jpg

[그림 6-4] 수정버튼 후 화면

 

Entity 추가(Insert)

엔티티 추가입니다. Shippers 엔티티 구조를 먼저 살펴보겠습니다. ShipperID 컬럼이 자동 증가입니다데이터 추가시에는CompanyName, Phone 컬럼의 데이터만 매핑해주면 됩니다.

CREATE TABLE [dbo].[Shippers](

       [ShipperID] [int] IDENTITY(1,1) NOT NULL,

       [CompanyName] [nvarchar](40) NOT NULL,

       [Phone] [nvarchar](24) NULL,

 CONSTRAINT [PK_Shippers] PRIMARY KEY CLUSTERED

(

       [ShipperID] ASC

)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY =OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

) ON [PRIMARY]

 

GO

 

Shippers 객체를 하나 생성해서 데이터를 매핑해줍니다컨텍스트 AddObject메서드를 통해서 Shippers 엔티티 데이터를 생성합니다데이터베이스 반영을 위해서는 SaveChanges 메서드를 꼭 출해줘야 합니다.!

 

        private void btnCreate_Click(object sender, EventArgs e)

        {

            using (var context = new NorthwindEntities())

            {

                Shippers addEntity = new Shippers();

                addEntity.CompanyName = "jiseon Company2;

                addEntity.Phone = "(02) 111-9999";

                context.Shippers.AddObject(addEntity);

                context.SaveChanges();

 

                dataGridView1.DataSource = context.Shippers;

            }

        }

 

 

06_05.jpg

[그림 6-5] 엔티티 생성 후 화면

 

Entity 삭제(Delete)

마지막으로 엔티티 삭제입니다.^^ 엔티티 수정과 마찬가지로 특정 데이터를 조회해서 컨텍스트DeleteObject에 삭제 엔티티를 할당합니다. SaveChanges 메서드를 호출하면 실제 데이터베이스에서 해당 데이터가 삭제됩니다.

 

        private void btnDelete_Click(object sender, EventArgs e)

        {

            using (var context = new NorthwindEntities())

            {

                var shipper = context.Shippers.Where(p => p.ShipperID == 6).First();

                context.DeleteObject(shipper);

                context.SaveChanges();

 

                dataGridView1.DataSource = context.Shippers;

            }

        }

 

 

06_06.jpg

[그림 6-6] 삭제 후 화면

 

엔티티를 조회하고 수정신규생성삭제하는 것을 살펴보았습니다생각보다 코드는 간단했지요~ 단순 조회성이 아닌 비지니스 로직이 추가되는 작업일 경우에는 꼭 SaveChanges 메서드를 호출해줘야 데이터베이스에 반영이 된다는 것만 잊지않으면 됩니다.! 감사합니다.^^

소스 파일 : EF4.06.zip


sqler에 아티클 작성 했던것을 공유합니다.

출처 : http://www.sqler.com/400541

Posted by 사나에
개발 이야기/ORM2012. 4. 15. 12:29

Entity Framework Context

이전 세션에서 Database에서 개체들을 Entity화하는 부분을 확인해보았습니다이번 시간은 이 엔티티를 가지고 실제 컨트롤에 데이터를 바인딩하는 부분을 살펴보겠습니다.

 

실전따라해보기!!

EDM 항목을 하나 추가해주세요.

01.JPG

[그림5-1] EDM 항목 추가

 

데이터베이스를 연결해주세요저는 기본인 Northwind를 연결하겠습니다.

02.JPG

[그림5-2] EDM Database연결

 

모델 네이스페이스를 지정해주시고요.

03.JPG

[그림5-3] Database 개체 선택

 

EDM이 자동생성 된것을 확인하셨죠?! 모델 브라우저에서 다음과 같이 NorthwindEntities가 생성된 것이 보입니다. EntityContainer EntityFramework ObjectContext 클래스를 상속합니다. ObjectContext은 정의된 EDM 엔티티 형식의 객체들의 데이터를 관리하는 기본 클래스입니다.^^

04.JPG

[그림5-4] 모델 브라우저

 

데이터를 뿌려줄 UI를 간단히 구성해보겠습니다버튼과 리트스박스로 구성되었으며 버튼을 클릭하면 리스트박스에 데이터를 바인딩하려합니다.

05.JPG

[그림5-5] UI 구성

 

버튼 클릭 시 소스 코드는 다음과 같습니다앞에서 언급한 LINQ Object를 질의하시면 됩니다. NorthwindEntities Customers엔티티를 가져와서 실제 데이터베이스 데이터를 바인딩하겠습니다조건에 맞는 데이터를 가져와야한다면 var customer = context.Customers; è 에서 조건 질의 하면된다.

 

        private void button1_Click(object sender, EventArgs e)

        {

            using (var context = new NorthwindEntities())

            {

                var customer = context.Customers;

                foreach (var item in customer)

                {

                    listBox1.Items.Add(string.Format("{0} | {1}", item.CompanyName, item.City));

                }

            }

        }

 

 

프로그램을 실행해서 버튼을 클릭해보겠습니다다음과 같이 목록이 주루륵조회되는 것을 보실 수 있습니다.

07.JPG

[그림5-6] UI Data Bind

 

디버깅으로 Customers를 확인해보면 ObjectSet객체가 반환되는 것을 확인 할 수 있습니다이렇게 EDM에서 엔티티들을ObjectSet으로 구성하는 것을 확인 하였습니다.

06.JPG

[그림5-7] ObjectSet

 

EDM 코드를 한번 더 살펴보죠. ObjectSet으로 다음과 같이 반환을 하고 있습니다.

 

        /// <summary>

        /// No Metadata Documentation available.

        /// </summary>

        public ObjectSet<Customers> Customers

        {

            get

            {

                if ((_Customers == null))

                {

                    _Customers = base.CreateObjectSet<Customers>("Customers");

                }

                return _Customers;

            }

        }

        private ObjectSet<Customers> _Customers;

   

 

 

추가 팁!

SQL Server에서는 논리적으로 다음과 같은 순서로 질의합니다.

(8) SELECT (9) TOP

(1) FROM

(3) JOIN

(2) ON

(4) WHERE

(5) GROUP BY

(6) WITH

(7) HAVING

(1) ORDER BY

 

이번 세션은 이렇게 마무리 짓겠습니다.^^ 다음 세션은 이번 세션의 확장으로 실제 Entity들의 작업에 대해서 알아보겠습니다행복한 하루 보내세요!

소스파일 : EF4.05.zip


sqler에 아티클 작성 했던것을 공유합니다.

출처 : http://www.sqler.com/396913


Posted by 사나에
개발 이야기/ORM2012. 4. 15. 12:29

Database-First VS Model-First

이번에 알아 볼 내용은 EDM(Entity Data Model)입니다. Entity Framework 4.0 기능에서 Model-First 지원이 있었는데요기존 버전과의 차이와 해당 기능에 대해서 자세히 살펴보는 시간이 되겠습니다이제 떠나보지요~~~ 후훗

 

Database-First

이전 버전의 방식으로 데이터베이스 개체들을 엔티티화하는 것으로 실제로 존재하는 개체들 즉, Database 기반의 데이터 모델이라고 보시면 됩니다. Visual Studio에서 간단한 프로젝트를 생성하시고 프로젝트에서 Item 항목을 추가해보겠습니다. Item에서"ADO.NET Entity Data Model"을 선택해주세요.

 

4_1.JPG

[그림 4-1] 항목 선택

 

추가하면 다음과 같은 화면이 나오는데 “Next”를 클릭합니다.

 4_2.JPG

[그림 4-2] EDM 마법사

 

연결정보를 선택하고 App.Config에 들어가는 연결명을 기입해주세요Default 값을 사용하셔도 됩니다. ConnectionString 설정 값입니다.

 4_3.JPG

[그림 4-3] 데이터베이스 연결 설정

 

가져올 데이터베이스 개체들을 선택하시고 모델 네임스페이스명을 기입해주세요그리고 완료!!

 4_4.JPG

[그림 4-4] 개체 선택

 

보시다시피 데이터베이스 개체들 기준의 엔티티들이 자동으로 생성되었습니다야호!!!!!!

 4_5.JPG

[그림 4-5] EDM

 

엔티티를 하나 선택하시고 마우스 오른쪽버튼을 클릭해서 “Table Mapping” 메뉴를 선택하시면 엔티티 상세정보가 출력됩니다.엔티티와 실제 DB 개체관의 관계도 표현이 되고요^^

 4_6.JPG

[그림 4-6] 테이블 매핑

 

추가로 View 메뉴에서  “Entity Data Model Browser”를 클릭하면 모델의 엔티티들을 볼 수 있다.

 4_8.JPG

[그림 4-7]  > EDM 브라우저

 

엔티티는 모델에 정의된 객체들입니다연계(Association)는 두 엔티티간의 관계입니다. EDMX의 객체들이 트리뷰로 출력됩니다.

 4_9.JPG

[그림 4-8] Entity Data Model Browser

지금까지 데이터베이스 기준의 모델을 생성하는 것을 확인하였습니다물리적 개체에서 논리적 모델로 표현되는 것입니다이를Database-First라고 합니다.

 

 

Model-First

다음은 모델 우선입니다ㅋㅋ 해석하니 모델 우선인데 좀 웃기네요데이터 모델링을 해보셨다면 아시겠지만 보통 개념모델 è논리모델 è 물리모델 순으로 진행됩니다이전 버전의 엔티티 프레임워크는 어쩜 거꾸로였죠ㅋ 엔티티 프레임워크 4.0에서는 개념 모델링 후 저장소에 개체들을 생성할 수 있는 기능이 추가되었다또 시작해보죠!

“ADO.NET Entity Data Model” 항목을 추가해주세요

 4_10.JPG

[그림 4-9] 항목 선택

 

빈 모델을 선택하고 완료버튼 클릭!

 4_11.JPG

[그림 4-10] EDM 마법사

 

다음 화면처럼 빈화면이 나옵니다. Toolbar를 보면 엔티티를 그릴 수 있는 도구들이 있는데요위부분에서 언급했지만 한번 더엔티티는 모델에 정의된 객체들이고 연계(Association)는 두 엔티티간의 관계입니다상속(Inheritance)은 두 엔티티간의 상속관계를 표현할 경우 사용됩니다.

 4_12.JPG

[그림 4-11] 빈 모델

 

도구들을 이용해서 엔티티 하나를 그려보겠습니다엔티티를 그리고 마우스 오른쪽을 클릭해서 속성 하나를 추가해보겠습니다.

 4_13.JPG

[그림 4-12] 엔티티 속성 추가

 

모델링 된 엔티티를 데이터 저장소에 생성해보겠습니다마찬가지로 마우스 오른쪽을 클릭해서 “Generate Database from Model…”을 선택하면

 4_14.JPG

[그림 4-13] 모델 자동 생성

 

데이터 저장소를 설정하는 화면이 출력됩니다적당한 값을 선택하고 “Next”을 클릭해주세요.

 4_15.JPG

[그림 4-14] 데이터베이스 연결 설정

 

데이터베이스 개체 구조를 정의한 DDL(Data Definition Language)이 생성됩니다.

 4_16.JPG

[그림 4-15] DDL 생성

 

완료를 클릭하면 스크립트가 화면에 출력됩니다.

 4_17.JPG

[그림 4-16] 스크립트

 

SQL 스크립트를 실행해보겠습니다.

 4_18.JPG

[그림 4-17] 스크립트 실행

 

아래 메세지 보니 성공적으로 완료되었네요^^ 실제로 생성되었는지 데이터베이스를 확인해보겠습니다.

 4_19.JPG

[그림 4-18] 스크립트 실행 결과

 

오호생성되었네요~

 4_20.JPG

[그림 4-19] 데이터베이스

개념 모델 이후에 저장소에 개체를 생성하는 방법을 Model-First이라고 합니다.

 

오늘은 이렇게 Database-First Model-First에 대해서 알아봤습니다.^^ 긴 글 끝까지 읽어주셔서 감사합니다



sqler에 아티클 작성 했던것을 공유합니다.

출처 : http://www.sqler.com/391510


Posted by 사나에
개발 이야기/ORM2012. 4. 15. 12:28

LINQ 알고가자

엔티티 프레임워크에서는 엔티티를 질의하는데 LINQ문을 사용합니다하여 이번에는 LINQ의 기본적인 사용법에 대해서 알아보자.

 

LINQ?

LINQ(Language Integrated Query )는 통합언어 쿼리로 .NET Framework 3.5에 포함되었다. LINQ to Object, LINQ to SQL, LINQ to XML로 크게 나눌 수 있는데 이는 데이터베이스, XML 등등 개체화하는 데이터 소스에 대해서 전반적으로 쉽게 질의 할 수 있게 제공한다.

3_1.jpg

[그림 3-1] .NET LINQ

이번 세션의 목표는 LINQ 문법을 익히는데 중점을 두며 아래 URL에 가면 LINQ 샘플을 다운로드 받아 볼 수 있는데 샘플을 기준으로 각각의 표현식을 설명하려합니다부족한 부분은 샘플을 다운받아서 한번씩 살펴보시기 바랍니다.
LINQ 샘플 다운로드 URL - http://msdn.microsoft.com/ko-kr/vcsharp/aa336746.aspx

LINQ는 쿼리 표현식과 람다식 함수로 나눠 작성할 수 있습니다예제는 주로 쿼리 표현식으로 작성하겠습니다더 람다식에 대해 더 자세히 공부하고 싶으신 분은 아래 링크를 참고하세요.
람다 식(C# 프로그래밍 가이드) - http://msdn.microsoft.com/ko-kr/library/bb397687.aspx

 

기본 표현식

Select
기본 데이터소스에서 특정 개체를 조회해오는 구문입니다구문 작성은 SQL구문과 비슷해서 쉽게 익힐 수 있다.

 

        public static void Select1()

        {

            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

 

            var numsPlusOne = from n in numbers

                              select n + 1;

 

            Console.WriteLine("Numbers + 1:");

            foreach (var i in numsPlusOne)

            {

                Console.WriteLine(i);

            }

        }

    }

 

3_2.jpg

[그림 3-2] Select 실행 결과

Where

해당 조건에 맞는 데이터를 조회할 경우 사용한다.

 

        public static void Where1()

        {

            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

 

            var lowNums = from n in numbers

                          where n < 5

                          select n;

 

            Console.WriteLine("Numbers < 5:");

            foreach (var x in lowNums)

            {

                Console.WriteLine(x);

            }

        }

 

3_3.jpg

[그림 3-3] Where 실행 결과

LINQ는 지연된 쿼리라는 특성을 가지고 있습니다이는 데이터 조건이 실행되어 결과 집합으로 가지고 있는것이 아니라 조건을 출력하는 시점에서 실행이 되는 것을 뜻합니다즉 위의 표현식에서 살펴보면 실제로 위에 해당되는 쿼리가 실행되는 시점은 출력을 요청하는 foreach 구문 내부입니다이를 지연된 쿼리라고 불리며 개발자의 설정에 따라 즉시실행을 할 수도 있습니다.

OrderBy

데이터 정렬하는 표현식입니다.

 

        public static void OrderBy1()

        {

            string[] words = { "cherry""apple""blueberry" };

 

            var sortedWords = from w in words

                              orderby w

                              select w;

 

            Console.WriteLine("The sorted list of words:");

            foreach (var w in sortedWords)

            {

                Console.WriteLine(w);

            }

        }

 

3_4.jpg

[그림 3-4] OrderBy 실행 결과

역정렬을 원하는 경우 descending” 구문만 추가해주면 됩니다.^^

 

            var sortedDoubles = from d in doubles

                                orderby d descending

                                select d;

 

 

집계 표현식

LINQ는 집계 연산을 수행하는 함수를 기본적으로 제공합니다기본함수에는 Count, Sum, Min/Max, Average, Aggregate 등등이 있다대표해서 몇가지만 알아보자.

Count

조회된 데이터의 Row수를 리턴합니다. LINQ는 기본적인 메서드를 제공하는데 Count 메서드만 호출하면 조회된 결과의 개수를 반환합니다. Count2 메서드는 조건에 해당하는 결과만 반환하게 됩니다.

 

        public void Count1()

        {

            int[] factorsOf300 = { 2, 2, 3, 5, 5 };

            int uniqueFactors = factorsOf300.Distinct().Count();

            Console.WriteLine("There are {0} unique factors of 300.", uniqueFactors);

        }

 

        public void Count2()

        {

            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

            int oddNumbers = numbers.Count(n => n % 2 == 1);

            Console.WriteLine("There are {0} odd numbers in the list.", oddNumbers);

        }

 

3_5.jpg

[그림 3-5] Count 실행 결과

Sum

Sum은 집합의 합계를 반환합니다. Count와 동일하게 Sum 메서드만 호출하면 됩니다.

 

        public void Sum1()

        {

            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

            double numSum = numbers.Sum();

            Console.WriteLine("The sum of the numbers is {0}.", numSum);

        }

 

        public void Sum2()

        {

            string[] words = { "cherry""apple""blueberry" };

            double totalChars = words.Sum(w => w.Length);

            Console.WriteLine("There are a total of {0} characters in these words.", totalChars);

        }

 

3_6.jpg

[그림 3-6] Sum 실행 결과

Min/Max

조회된 결과값의 최소값/최대값을 반환합니다.

 

        public static void Min1()

        {

            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

            int minNum = numbers.Min();

            Console.WriteLine("The minimum number is {0}.", minNum);

        }

 

        public static void Max1()

        {

            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

            int maxNum = numbers.Max();

            Console.WriteLine("The maximum number is {0}.", maxNum);

        }

 

 3_7.jpg

[그림 3-7] Min/Max 실행 결과

 

기타 표현식

Join

서로다른 데이터를 조인하여 결과를 반환하는 구문입니다관계형 데이터베이스 경우 이런 구문을 자주 사용하여 데이터를 조회합니다아래 소스는 카테고리가 동일한 데이터만 출력하는 예제입니다.

 

        public static void Join1()

        {

            string[] categories = new string[]{ "Beverages""Condiments""Vegetables""Dairy Products""Seafood" };

            List<Product> products = GetProductList();

 

            var q = from c in categories

                    join p in products on c equals p.Category

                    select new { Category = c, p.ProductName };

 

            foreach (var v in q)

                Console.WriteLine(v.ProductName + ": " + v.Category);

        }

 

        private static List<Product> GetProductList()

        {

            List<Product> products = new List<Product>();

            products.Add(new Product("Beverages""Beverages1"));

            products.Add(new Product("Vegetables""Vegetables1"));

            products.Add(new Product("Dairy Products""Dairy Products1"));

            products.Add(new Product("Seafood""Seafood1"));

            products.Add(new Product("Source""Source1"));

 

            return products;

        }

 

 3_8.jpg

[그림 3-8] Join 실행 결과

 Into

Database에 프로시져에서 임시로 데이터를 저장 해놓는 temp table을 사용할 경우가 있습니다그와 같이 into문도 임시로 데이터를 저장해야할 경우에 사용하는 구문입니다즉 임시 저장소를 만드는 것이지요~

 

            var orderGroups = from prod in products

                              group prod by prod.Category into prodGroup

                              select prodGroup;

 

소스를 보면 prod라는 개체에서 Category별로 그룹을 지었습니다그 결과를 into구문을 사용하여 prodGroup에 담았습니다최종적으로 prodGroup 결과를 반환하게 됩니다어떤 의미로 사용하는지 아시겠지요??? ^.^

 

LINQ는 앞으로 엔티티 프레임워크를 나가기 전에 사전에 준비되어야 하는 사항인지라 간략하게 알아보았습니다작성된 샘플(EF4.03.zip)을 함께 업로드 해드리겠습니다참고해주시고 끝까지 읽어주셔서 감사합니다.~~*

sqler에 아티클 작성 했던것을 공유합니다.

출처 : http://www.sqler.com/390183


Posted by 사나에
개발 이야기/ORM2012. 4. 15. 12:27

Entity Framework 4.0 기능 살펴보기

이번 시간에는 본격적으로 Entity Framework 4.0에 대해서 알아보겠습니다. Entity Framework는 데이터와 객체(Entity)관계를 쉽게 맺어줌으로 실제적으로 ORM 프레임워크로 간주할 수 있습니다. Entity Framework 4.0으로 업데이트되면서 보강된 더 강력해진 대표 기능에 대해서 살펴보겠습니다고고씽~

 

대표 기능

다양한 데이터베이스 서버 지원

Data Store가 다음과 같으면 언제 어디서든 Entity Framework를 사용 할 수 있다. MS SQL, Oracle, MySql, PostgreSQL, SQL Anywhere, DB2, Informix, U2, Ingres, Progress, Firebird, Synergy, Virtuoso등이 있습니다굉장히 많죠저희가 주로 쓰는 MS SQL, Oracle, MySql가 될것 같은데요. Entity Framework ADO.NET Data Provider 상위에서 빌드되기 때문에 이런 많은 데이터베이스 지원이 가능했습니다.
2_1.jpg 
[
그림 2-1] Entity Framework

 

통합된 Visual Studio 도구 제공

Visual Studio Tool에서 시각적인 Entity 모델과 기존 데이터베이스 개체 모델화를 자동으로 생성해준다또한 새로운 데이터베이스도 Visual Studio에서 모든 권한을 편집하여 배포 가능하다. Visual Studio의 가장 큰 장점인 드래그 앤 그롭이 가능하다는 것 입니다아주 쉽게 EDM(Entity Data Model)을 생성할 수 있죠~

 

POCO(Plain Old CLR Objects) 지원

기존 버전에서는 데이터 저장소와 논리적 객체(Entity)간의 연관성이 표현되지 않았습니다이를 지속성 무시 개체 POCO라고 불리는데요이번 버전에서는 영속성을 지원하는 POCO Entity가 제공됩니다
POCO Entity
 System.Data.Objects.ObjectContext 클래스를 상속 받는데요이 클래스에서 제공되는 메서드는 데이터 저장소와 엔티티간의 영속성을 지원 가능하게 해준다
.
http://msdn.microsoft.com/ko-kr/library/system.data.objects.objectcontext.aspx

 

Model-First 지원

Entity Framework 이전 버전에서 개념적 모델을 만들 수 있었습니다다만 개념적 모델은 데이터베이스 마법사를 통해서 생성되기 때문에 모델은 DB기반의 모델에 존속 될 수 밖에 없었습니다. Entity Framework 4.0에서는 기존방식도 지원하고 개념적 모델이 DB에 물리적 개체가 없어도 모델링이 가능하게 지원한다이를 Model-First라고 합니다.

 

관계 Object의 지연 실행

지연 실행에 대해서는 기존 버전에도 존재하며 LINQ의 대표 기능이기도 합니다다만 관계형에 대해서는 표현이 되지 않았는데요이번 버전에서 쿼리 결과가 명시적으로 탐색 속성에서 관계형 개체를 확인 할 수 있습니다.

 

엔티티 질의 LINQ 함수

Entity Framework 초기 버전에서는 함수의 지원이 제한되어 있었습니다여기서 말하는 함수는 저장 프로시져나 데이터베이스UDF를 말하는데요새로운 EntityFunctions SqlFunctions 클래스가 이 이슈를 해결하기 위해 추가 되었습니다이 클래스들은 개발자에게 LINQ로 엔티티 질의를 할 수 있게 기능을 제공합니다.

 

Complex Type 지원

Visual Studio 2010 Entity Data Model Designer에서 원하는 복잡한 타입을 쉽게 정의 할 수 있습니다모델 탐색기에서 트리로 보여주는데요아래 그림처럼 모델 탐색기에서 Complex Type을 생성 할 수 있으며 여기서 정의된 타입은 Entity 속성으로 사용됩니다.
2_2.jpg

[그림 2-2] Model Browser

 

모델 브라우저 개선

Entity Framework 4.0이 릴리즈되면서 모델 브라우저에 몇 가지들이 개선되었다.

l  기본 데이터베이스가 변경 사항이 있을 때 모델 업데이트

l  모델에서 객체 삭제하기

l  스토리지와 개념적 모델에서 지정한 문자열 검색 기능

l  디자인 화면에서 매핑 된 Entity 타입 찾기

 

 

Entity Framework의 장점

1.      개발시간 절감된다.

2.      개발자는 응용프로그램을 구현하는 입장에서 객체 모델의 관점에서 작업할 수 있다.

3.      응용프로그램은 독립적인 개념적 모델을 지원함으로써 실제 데이터 저장소에 대한 종속이 해방될 수 있다.

4.      객체 모델과 특정 데이터 저장소의 스키마 사이의 매핑인 응용프로그램의 코드를 변경하지 않고도 가능하다.

5.      LINQ지원으로 개념적 모델에 대한 질의 시에 인텔리센스가 제공되며 컴파일 타임에서 구문 유효성 검사가 제공된다.

 

다음 세션부터 실전입니다.! 실전으로 통해서 위에서 말하는 기능들이 무엇인고~에 대해서 더 잘 이해 될 것입니다끝까지 읽어주셔서 감사합니다.^^

 

참고 URL

http://msdn.microsoft.com/en-us/data/dd363565.aspx
http://msdn.microsoft.com/en-us/data/aa937709
http://msdn.microsoft.com/en-us/data/aa937723
http://archive.msdn.microsoft.com/cs2010samples



sqler에 아티클 작성 했던것을 공유합니다.

출처 : http://www.sqler.com/390175


Posted by 사나에