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

Entity Framework – ASP.NET MVC(3)

ASP.NET MVC 세번째 이야기앞에서 목록만 출력하는것을 살펴보았습니다어떤가요굉장히 뭔가 간단하고 재미있지않나요이렇게 엔티티가 바로 바인딩되는 것을 보고 Enterprise 환경에서는 어떨지몰라도 개인적으로 사이트를 만들때 많은 작업들이 간소화되면서 빨리 그리고 가볍게 사이트를 구성할 수 있을듯한 느낌을 받았습니다앞 세션에 이어 이번에는 비지니스 로직 영역과 프로세스를 구체적으로 살펴보겠습니다.

 

List 화면

Shippers 데이터가 목록에 바인딩된 것을 확인 할 수 있습니다코드를 한번 살펴보죠~

11_01.JPG

[그림 11-1] 리스트 화면

 

“NorthwindEntities” 컨텍스트의 Shippers 엔티티를 View에 반환하는 것을 확인 할 수 있습니다화면에서는 뷰 객체를 받아서 처리하여 목록을 출력하고 있습니다구문이 많이 익숙하지 않나요앞에서 저희가 엔티티 작업에 대해서 다뤘던 구문과 거의 비슷합니다.

 

        private NorthwindEntities db = new NorthwindEntities();

 

        public ViewResult Index()

        {

            return View(db.Shippers.ToList());

        }

   

 

 

상세 화면

리스트에서 항목을 클릭하면 상세 화면이 다음과 같이 구성됩니다.

11_02.JPG

[그림 11-2] 상세 화면

 

코드를 보면 인자로 id값을 받고 있습니다유니크한 ShipperID의 값인데요컨트롤러에서는 id값에 해당하는 데이터를 뷰에 반환하고 있습니다뷰에서는 반환된 데이터를 위 화면처럼 뿌려주고 있습니다.

 

        public ViewResult Details(int id)

        {

            Shippers shippers = db.Shippers.Single(s => s.ShipperID == id);

            return View(shippers);

        }

 

 

 

수정 화면

다음은 수정 화면입니다실제로 데이터 변경이 발생하게 되는데요잊지않으셨죠?????

11_03.JPG

[그림 11-3] 수정 화면

데이터가 변경되거나 삭제 등 비지니스 로직이 추가 될 경우에는 SaveChanges 메서드를 꼭 호출해야 데이터베이스에 반영된다는 사실을~~~~ 수정하는 코드도 많이 익숙하군요^^

 

        [HttpPost]

        public ActionResult Edit(Shippers shippers)

        {

            if (ModelState.IsValid)

            {

                db.Shippers.Attach(shippers);

                db.ObjectStateManager.ChangeObjectState(shippers,EntityState.Modified);

                db.SaveChanges();

                return RedirectToAction("Index");

            }

            return View(shippers);

        }

 

 

 

신규생성 화면

다음은 데이터를 생성하는 화면입니다. ShipperID는 자동생성이기에 입력이 안되고 CompanyName Phone값만 입력을 하면됩니다.

11_04.JPG

[그림 11-4] 신규생성 화면

 

코드를 보면 좀 다른것을 확인 할 수 있습니다항목들을 인자로 받는게 아니라 Shippers 객체 자체를 인자로 받고 있습니다그게 가능한 이유는 뷰의 코드를 확인하면 궁금증이 풀립니다.

 

        [HttpPost]

        public ActionResult Create(Shippers shippers)

        {

            if (ModelState.IsValid)

            {

                db.Shippers.AddObject(shippers);

                db.SaveChanges();

                return RedirectToAction("Index"); 

            }

 

            return View(shippers);

        }

       

 

뷰를 구성할때 모델의 객체를 설정해줬습니다하여 바로 뷰에서 Shippers 객체를 인자로 넘겨 줄 수 있었던 것입니다만약 뷰에 모델을 할당하지않는다면 항목을들 하나하나 넘겨서 컨트롤러에서 다시 Shippers 객체에 할당해주는 코드를 작성해야겠지요하지만 그렇게 작업할 이유가 없겠죠??!!! 바로 모델 객체를 뷰와 컨트롤러 사이의 매개변수로 사용이 가능하니깐요!!!

 

        <div class="editor-label">

            @Html.LabelFor(model => model.CompanyName)

        </div>

        <div class="editor-field">

            @Html.EditorFor(model => model.CompanyName)

            @Html.ValidationMessageFor(model => model.CompanyName)

        </div>

 

        <div class="editor-label">

            @Html.LabelFor(model => model.Phone)

        </div>

        <div class="editor-field">

            @Html.EditorFor(model => model.Phone)

            @Html.ValidationMessageFor(model => model.Phone)

        </div>

       

 

 

삭제 화면

마지막으로 삭제화면입니다리스트에서 삭제 링크를 클릭하면 확인을 한번 더 진행합니다이는 프로세스를 어떻게 구성하느냐에 따라 달라집니다우선 스캐폴링 옵션을 이용한 CRUD 화면을 구성하면 기본으로 구성되는 프로세스입니다.

11_05.JPG

[그림 11-5] 삭제 확인 화면

 코드는 다음과 같습니다이또한 SaveChanges를 최종적으로 호출하고 있습니다.

 

        [HttpPostActionName("Delete")]

        public ActionResult DeleteConfirmed(int id)

        {           

            Shippers shippers = db.Shippers.Single(s => s.ShipperID == id);

            db.Shippers.DeleteObject(shippers);

            db.SaveChanges();

            return RedirectToAction("Index");

        }

 

 

어떤가요웹에서 필요한 기본적인 작업을 확인해보았습니다쉽죠?! MVC JQuery를 활용한다면 더 세련되고 화려한 웹페이지 구성을 할 수 있습니다. ASP.NET MVC JQuery는 각자 파트에서 더 상세히 공부하실 수 있습니다이렇게 해서 대작~ Entity Framework – ASP.NET MVC 세션 막을 내립니다감사합니다.



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

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

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

Entity Framework – ASP.NET MVC(2)

ASP.NET MVC 두번째 이야기저희가 가져온 엔티티를 화면에 구성하는 작업을 진행하겠습니다. MVC를 다뤄보신 분도 계시겠지만 처음 접하는 분을 위해 최대한 쉽게 설명드리겠습니다.

 

ASP.NET MVC Razor

첫 화면을 기억하시나요?

10_01.JPG

[그림 10-1] Razor 기본 구성 화면

 

첫화면 설정은 Global.asax 페이지에서 설정하게 됩니다.

controller명과 action명을 지정하면 “http://localhost:49999/Home/Index”처럼 URL이 구성됩니다.

 

        public static void RegisterRoutes(RouteCollection routes)

        {

            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

 

            routes.MapRoute(

                "Default"// 경로 이름

                "{controller}/{action}/{id}"// 매개 변수가 있는 URL

                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 매개 변수 기본값

            );

        }

   

 

Controllers 폴더에서 컨트롤러를 추가해보겠습니다다음 화면처럼 메뉴를 클릭해주세요.

10_02.JPG

[그림 10-2] 컨트롤러 추가 메뉴

 

컨트롤러명을 작성하고 스캐폴링 옵션에 다음과 같이 설정해주세요모델 클래스는 저희가 추가한 “Shippers”를 지정하면 됩니다.데이터 컨텍스트 클래스는 역시 저희가 생성한 “NorthwindEntitys”를 지정합니다.

10_03.JPG

[그림 10-3] 컨트롤러 추가

 

고급 옵션에서 레이아웃을 설정해주시면 메인화면 레이아웃을 그대로 구성된 페이지를 만날 수 있습니다^^

10_04.JPG

[그림 10-4] 고급 옵션 설정

 

생성하면 ShipperController 클래스에 많은 메서드들이 자동으로 생성된것을 보실 수 있습니다또한 스캐폴링 옵션으로/Views/Shipper 폴더에 View 페이지가 자동으로 생성된것을 확인 할 수 있습니다.

10_05.JPG

[그림 10-5] 뷰 구성

 

참고로!!! 자동생성하지 않고 뷰를 추가하고 싶다면 컨트롤러에서 생성하려는 메서드에 마우스를 클릭해서 View(화면)을 생성해주면 됩니다.

10_06.JPG

[그림 10-6] 뷰 추가 메뉴

 

여기까지 잘 따라오셨죠공통 레이아웃에서 “Shipper”의 뷰로 가는 링크를 추가해보겠습니다.

10_07.JPG

[그림 10-7] 레이아웃 페이지

 

메뉴 영역에 샘플 링크를 다음과 같이 추가해주세요.

 

            <div id="menucontainer">

                <ul id="menu">

                    <li>@Html.ActionLink("""Index""Home")</li>

                    <li>@Html.ActionLink("정보""About""Home")</li>

                    <li>@Html.ActionLink("샘플""Index""Shipper")</li>

                </ul>

            </div>

            

 

F5를 클릭해서 실행해보겠습니다저희가 추가한 샘플 링크를 클릭하면 다음과 같이 “Shippers” 데이터가 목록을 출력되는 것을 확인 할 수 있습니다완전 간단하고 신기하네요^^

10_08.JPG

[그림 10-8] 샘플 리스트 화면

 

작성하다보니 내용은 그렇게 많지않는데 그림때문에 내용이 길어지네요이번 세션에서는 모델-컨트롤러-뷰에 대해서 생성하여 실행하는 것을 간단히 확인해보았습니다그렇다면 비지니스 로직(데이터 처리)들은 어떻게 작업을 하게 되는지 다음 세션에서 확인 해보겠습니다감사합니다.^^



sqler에 아티클 작성 했던것을 공유합니다.
출처 : http://www.sqler.com/401125


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

Entity Framework – ASP.NET MVC(1)

아키텍처 레이어를 나눠보면 Entity Framework Data Access Logic Business Logic 영역에서 역할을 해주고 있는데요소프트웨어 개발 시 어떻게 기준을 잡는가에 따라서 달라질 수 있을듯합니다오늘 알아 볼 내용은 ASP.NET MVC3를 이용해서 User Presentation영역과 Entity Framework 상호 관계에 대해서 알아보려 합니다

 

09_01.jpg

[그림 9-1] 레이어 구성

 

ASP.NET MVC3

올해 초 ASP.NET MVC3가 정식으로 릴리즈되었습니다. MVC는 익히 아시다시피 Model-View-Controller 패턴으로 각각의 영역이 나눠서 독립적으로 작업이 수행되며 서로간의 관계를 통해서 상호보완적으로 구성되는 설계 방법론이라고 볼 수 있습니다. MVC에 대해서는 ASP.NET 파트에서 상세히 설명이 되고 있기에 간략히 언급만 하겠습니다. ^^

09_02.jpg

[그림 9-2] MVC 패턴

 

ASP.NET MVC 3 RTM 다운로드 URL

http://www.microsoft.com/download/en/details.aspx?id=4211

ASP.NET MVC 3 RTM Tools Update

http://www.microsoft.com/downloads/ko-kr/details.aspx?familyid=82cbd599-d29a-43e3-b78b-0f863d22811a&displaylang=ko

 

 

프로젝트 생성 및 구성

ASP.NET MVC With Razor로 웹 프로젝트를 생성합니다새 프로젝트에서 다음 항목을 선택해주세요.

09_03.jpg

[그림 9-3] ASP.NET MVC 웹 프로젝트 추가

 

MVC3 Razor 엔진을 제공하고 있습니다. Razor로 작업을 할 경우 보다 빠른 생산성을 보여줍니다개인적인 생각으론 웹페이지가 가벼워지는 느낌도 있습니다ㅋㅋ

09_04.jpg

[그림 9-4] Razor 선택

 

웹 프로젝트를 생성하였다면 F5를 눌러서 실행을 해보겠습니다기본적으로 구성된 레이아웃에 필수 기능들을 탑제(?)된 화면을 보실 수 있습니다저희가 여기에 추가 기능을 구현하게 됩니다요~

09_05.jpg

[그림 9-5] MVC 기본 레이아웃 화면

 

첫번째 작업은 Entity를 추가해줘야겠죠?! 여기는 Entity Framework에 대한 세션이니깐요~

09_06.jpg

[그림 9-6] ADO.NET 엔티티 데이터 모델 항목 추가

 

계속적으로 반복되는 “Northwind” 데이터베이스를 연결해주세요참고로 Northsind pubs 기본 데이터베이스는 다음URL에서 다운 가능합니다.

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23654

09_07.jpg

[그림 9-7] DBMS 연결

 

개체는 “Shippers”테이블만 선택해주세요.

09_08.jpg

[그림 9-8] 엔티티 선택

 

추가를 다하셨다면 프로젝트는 다음과 같이 구성이 될거예요맞게 나오셨나요??

09_09.jpg

[그림 9-9] 프로젝트 구성

 

이제 프로젝트 구성이 완료되었습니다환경이 셋팅이 안되신 분들은 설정하느라 시간을 좀 투자하셨을듯 합니다이번 세션은 환경설정 및 프로젝트 구성하는것으로 마무리하겠습니다이어서 다음 세션으로 고고고~

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

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



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

Entity Framework - Entity Stored Procedure 활용(2)

Entity Framework에서 Stored Procedure를 다루는 방법에 대해서 앞 세션에서 다뤘는데 또 다른 방법이 있어 추가로 소개하고자 합니다. Visual Studio의 막강한 기능으로 대부분이 자동생성됩니다이번 시간도 아주 간단한 작업만으로 Entity Stored Procedure 다룰 수 있습니다떠나보자구용~~

 

Stored Procedure

앞 세션에서 사용한 프로시져를 그대로 사용하겠습니다.

08_01.jpg

[그림 8-1] 프로시져 목록

 

Stored Procedure Entity 업데이트

EDM 프로시져를 가져오겠습니다. “update Model from Database…”메뉴를 클릭해주세요.

08_02.jpg

[그림 8-2] 모델 업데이트

 

추가할 해당 프로시져를 선택해주세요.

08_03.jpg

[그림 8-3] Stored Procedure 추가

 

기본적으로 엔티티 매핑 개체 추가 후 모델 브라우저를 보면 다음과 같이 트리가 구성됩니다.

08_04.jpg

[그림 8-4] 모델 브라우저 트리

 

가지고 온 프로시져를 엔티티의 함수로 가져오는 작업을 추가 해줘야합니다프로시져에서 다음과 같이 “Add Function Import…”메뉴를 선택합니다.

08_05.jpg

[그림 8-5] 모델 브라우저 트리 메뉴

 

함수 가져오는것은 스로시져에 함수명만 지정해주면 해당 함수명으로 자동으로 매핑이 됩니다..

08_06.jpg

[그림 8-6] 함수 가져오기 설정

 

3개 모두 함수 가져오기하면 엔티티의 함수 목록에 다음과 같이 출력됩니다이제 프로시져 가져오는 작업이 완료되었습니다.

08_07.jpg

[그림 8-7] 모델 브라우저 트리 – 함수 가져오기

 

Entity 생성(Insert)

추가했던 함수명이 컨텍스트에서 메서드로 제공된다제공된 메서드에 맞춰 파라메터를 넣어주면 됩니다.

 

        private void btnInsert_Click(object sender, EventArgs e)

        {

            using (var context = new NorthwindEntities())

            {

                context.Shippers_INSERT("SM Company""(031)123-1234");

                MessageBox.Show("record inserted");

            }

        }

 

 

SQL Profiler에서 확인하면 Shippers_INSERT” 프로시져가 호출되어 데이터가 추가된 것을 확인 할 수 있습니다.

08_08.jpg

[그림 8-8] SQL Profiler 데이터 추가


Entity 수정(Update)

수정하는 “Shippers_UPDATE” 메서드를 호출하여 엔티티 수정을 합니다.

 

        private void btnUpdate_Click(object sender, EventArgs e)

        {

            using (var context = new NorthwindEntities())

            {

                context.Shippers_UPDATE(2, "United Package_Modify""(503) 555-3190");

                MessageBox.Show("record updated");

            }

        }

 

 

SQL Profiler에서 확인하면 Shippers_UPDATE” 프로시져가 호출되고 있는것을 확인 할 수 있습니다.

08_09.jpg

[그림 8-9] SQL Profiler 데이터 수정

 

Entity 삭제(Delete)

“Shippers_DELETE” 메서드를 호출하여 데이터 삭제를 합니다.

 

        private void btnDelete_Click(object sender, EventArgs e)

        {

            using (var context = new NorthwindEntities())

            {

                context.Shippers_DELETE(10);

                MessageBox.Show("record deleted");

            }

        }

 

 

10으로 파라메터를 할당한 Shippers_DELETE” 프로시져가 호출되고 있습니다.

08_10.jpg

[그림 8-10] SQL Profiler 데이터 삭제

 

프로시져를 함수로 가져와서 메서드형태로 사용하는 것을 확인해보았습니다앞 세션에서 다룬것은 테이블 기준으로 프로시져를 활용하는 것이 었습니다테이블 기준이 아닌 프로시져를 사용할 경우는 이렇게 함수로 가져와서 작업을 하는게 편할 수도 있을것 같네요감사합니다.

소스 코드 : EF4.08.zip


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

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


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

Entity Framework - Entity Stored Procedure 활용(1)

앞 세션에서 Entity Framework의 Entity CRUD 작업에 대해서 알아보았습니다앞 세션에서 엔티티 작업은 실제로 Ad-Hoc Query를 사용합니다이번에는 Stored Procedure를 사용하여 데이터 작업하는 것을 확인해보겠습니다.

 

기본 Stored Procedure 생성

이번 내용을 확인해보기 위해 필요한 프로시져 스크립트입니다Northwind 데이터베이스에 생성해주세요~

USE Northwind

 

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

-- =============================================

-- Description:     신규생성

-- =============================================

CREATE PROCEDURE Shippers_INSERT

       @CompanyName nvarchar(40),

       @Phone nvarchar(24)

AS

BEGIN

       SET NOCOUNT ON;

      

       INSERT INTO [Northwind].[dbo].[Shippers]

           ([CompanyName],[Phone])

     VALUES

           (@CompanyName, @Phone)

 

END

GO

 

 

-- =============================================

-- Description:     수정

-- =============================================

CREATE PROCEDURE Shippers_UPDATE

       @ShipperID INT,

       @CompanyName nvarchar(40),

       @Phone nvarchar(24)

AS

BEGIN

       SET NOCOUNT ON;

      

       UPDATE [Northwind].[dbo].[Shippers]

       SET [CompanyName] = @CompanyName, [Phone] = @Phone

       WHERE ShipperID = @ShipperID

      

END

GO

 

 

-- =============================================

-- Description:     삭제

-- =============================================

CREATE PROCEDURE Shippers_DELETE

       @ShipperID INT

AS

BEGIN

       SET NOCOUNT ON;

      

       DELETE FROM [Northwind].[dbo].[Shippers]

       WHERE ShipperID = @ShipperID

      

END

GO

 

 

 

Stored Procedure Entity 업데이트

EDM 프로시져를 가져오겠습니다. “update Model from Database…”메뉴를 클릭해주세요.

07_01.jpg

[그림 7-1] 모델 업데이트

 

앞에서 생성한 프로시져를 선택해주세요.

07_02.jpg

[그림 7-2] Stored Procedure 추가

 

프로시져를 가져왔다면 엔티티 매핑 작업을 진행해주세요. EDM에서 매핑 상세에서 “Shippers” 엔티티의 프로시져 항목을 클릭하면 다음과 같은 화면이 나옵니다. Insert, Update, Delete에 맞는 프로시져를 맞춰서 설정해주면 자동으로 매핑이 됩니다.

 07_03.jpg

[그림 7-3] 엔티티 매핑

 

믿기지않겠지만,,, 다 끝났습니다.^^

 

Entity 생성(Insert)

소스 코드를 보면 아시겠지만 앞 세션에서 다룬 엔티티 생성 코드와 동일합니다.

 

        private void btnInsert_Click(object sender, EventArgs e)

        {

            using (var context = new NorthwindEntities())

            {

                Shippers shipper = new Shippers();

                shipper.CompanyName = "test 11";

                shipper.Phone = "(02)123-1234";

                context.Shippers.AddObject(shipper);

                context.SaveChanges();

                MessageBox.Show("record inserted");

            }

        }

   

 

SQL Profiler에서 확인하면 Shippers_INSERT” 프로시져가 호출되어 데이터가 추가된 것을 확인 할 수 있습니다.

07_04.jpg

[그림 7-4] SQL Profiler 데이터 추가


Entity 수정(Update)

엔티티 데이터 수정도 마찬가지입니다특정 항목에 대해서 데이터를 수정하고 SaveChange메서드를 호출하여 최종적으로 데이터베이스에 반영하는 액션을 취합니다.

 

        private void btnUpdate_Click(object sender, EventArgs e)

        {

            using (var context = new NorthwindEntities())

            { 

                var per = context.Shippers.Where(p => p.ShipperID == 7).First();

                per.CompanyName = "JYP Company 77";

                per.Phone = "(02)123-1234";

                context.SaveChanges();

                MessageBox.Show("record updated");

            }

        }

   

 

SQL Profiler에서 확인해보죠. “Shippers_UPDATE” 프로시져가 호출되고 있네요.

07_05.jpg

[그림 7-5] SQL Profiler 데이터 수정

 

Entity 삭제(Delete)

데이터 삭제하는 부분도 확인해보겠습니다.

 

        private void btnDelete_Click(object sender, EventArgs e)

        {

            using (var context = new NorthwindEntities())

            {

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

                context.DeleteObject(shipper);

                context.SaveChanges();

 

                MessageBox.Show("record deleted");

            }

        }

   

 

역시 Shippers_DELETE” 프로시져가 호출되고 있습니다.^^

07_06.jpg

[그림 7-6] SQL Profiler 데이터 삭제

 

이번에 알아본것은 간단히 요약하자만 특정 엔티티 기준에서 데이터 작업을 할 경우 Stored Procedure를 사용하는 것을 확인해봤습니다현업에서는 Stored Procedure를 활용을 많이 하기때문에 알아두시면 유용하게 사용될거라 생각됩니다 ㅋㅋ 이번 세션은 여기까지읽어주셔서 감사합니다. (_._)꾸벅

소스 코드 : EF4.07.zip

 

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

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


Posted by 사나에
개발 이야기/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 사나에