개발 이야기/SharePoint2013. 5. 31. 00:25


"SharePoint 쌩초보~ 이제 조금씩 알아가보자."


SharePoint는 말 그대로 쉐어가 포인트가 되는 시스템이다. 공동 작업이나 공동 문서 공유 등등 기본적인 프로세스가 탑재(?!)되어 있는 시스템이라고 할 수 있다. 


SharePoint 2013 Guide를 다운 받을 수 있는 URL. - 첨부 파일을 다운받으셔도 되고요.

http://www.microsoft.com/en-us/download/details.aspx?id=34023

SharePoint Server 2013 IT Professional Reviewer's Guide.pdf



영상이 너무 길다. ㅠㅠ



주요 기능

  • 브랜딩
  • Business Connectivity Services
  • 비즈니스 인텔리전스
  • eDiscovery
  • ID 관리
  • 모바일 장치
  • 레코드 관리 및 규정 준수
  • 검색
  • 공유 컴퓨팅
  • 업그레이드
  • 웹 콘텐츠 관리

SharePoint Server 2013의 장점
  • 비용 관리
  • 위험 관리
  • 시간 관리


이제 막 시작하는 쉐어포인트 공부. 위에 내용을 하나하나 파헤쳐보자구낭~ ㅎㅎ



출처 : http://technet.microsoft.com/ko-kr/sharepoint/fp142374.aspx

Posted by 사나에
개발 이야기/ASP.NET2012. 8. 9. 15:49


이번 시간은 ASP.NET MVC Filter에 대해서 개념을 잡아보아요.


Filter는 요청건의 처리를 하는 파이프라인에서 추가적인 로직을 구현할 수 있게 제공합니다. 예를 들어 URL를 통해 들어온 요청에서 권한을 체크한다던가, 모니터링을 위한 로그를 쓴다던가, 캐싱을 할경우에 Filter를 이용하면 효율적으로 관리할 수 있다. 즉, ASP.NET MVC는 Routing으로 인해 프로젝트 구조를 체계적으로 관리할 수 있는 장점이 있기에 여기에 Filter를 적용하면 깔끔하고 정확한 공통처리가 가능하다. 


 Filter의 사용은 적용하고자하는 Controller의 클래스나 메서드 단위에서 어트리뷰트로 선언을 하면 적용된다.


[FilterName]

public class HomeController : Controller

{

    [FilterName]

    public ActionResult Index()

    {

        ViewData["Message"] = "Welcome to ASP.NET MVC!";

 

        return View();

    }

 

    public ActionResult About()

    {

        return View();

    }

}



요청에 따른 MVC 처리 과정을 보면 최종적으로 Action Filter를 통해 Action result에서 Client에 보내질 컨텐츠가 반환됩니다. 이때 Filter를 사용하면 Action Method 전후나 Result 전후로 로직 제어가 가능하다.


MVC Framework에는 4개의 기본적인 Filter 타입을 제공한다.

1.     Authorization : 인증, 권한 처리
2.     Action : 액션 메서드 전후 처리
3.     Result : 액션 결과 전후 처리
4.     Exception : 에러 처리

위 4개의 Filter에 대해서는 간단히 언급만하고 앞으로 하나하나 자세히 살펴보겠습니다.^^
이번 아티클에서는 필터의 개념정도만 잡아갔으면 합니다.
끝까지 읽어주셔서 감사합니다.

Posted by 사나에
개발 이야기/ASP.NET2012. 8. 9. 15:36

ASP.NET MVC를 활용하면 간편하게 기본 웹사이트 구조를 구축할 수 있다. MVC에서 Model의 영역에 해당하는 부분을 Entity Framework를 사용하여 Database Table 기반의 개체들을 개발 소스단에서 사용하는 객체화를 보다 쉽게 만들 수 있다, Entity Framework .NET ORM Framework Table 컬럼과 Database 관계를 C#  Object화해주는 Framework이다또한, Entity Framework단에서 LINQ를 사용하여 Object 질의를 할 수 있다.

 

[그림1 - Entity Framework 구조]

 

위 그림처럼 Entity Framework의 기본 구조를 살펴보면 Entity Framework는 기존 ADO.NET Data Providers 기반에서 EntityClient Data Provider가 제공된다기존의 ADO.NET을 기대로 활용한다는 것이다. EntityClient Data Provider를 통해서 소스 코드에서 사용할 C# Object Services를 만들어준다개발자는 Object들을 Entity SQL 나 기존에 익숙한 LINQ를 사용하여 원하는 데이터를 질의 할 수 있다. Entity Framework를 사용했을 때 가질 수 있는 장점을 MSDN에서는 다음과 같이 정리하고 있다.

 

Entity Framework의 장점

  • 1. 개발시간 절감된다.
  • 2. 개발자는 응용프로그램을 구현하는 입장에서 객체 모델의 관점에서 작업할 수 있다.
  • 3. 응용프로그램은 독립적인 개념적 모델을 지원함으로써 실제 데이터 저장소에 대한 종속이 해방될 수 있다.
  • 4. 객체 모델과 특정 데이터 저장소의 스키마 사이의 매핑인 응용프로그램의 코드를 변경하지 않고도 가능하다.
  • 5. LINQ지원으로 개념적 모델에 대한 질의 시에 인텔리센스가 제공되며 컴파일 타임에서 구문 유효성 검사가 제공된다.

 

우리는 지금 ASP.NET MVC 프로젝트 기반에서 Entity Framework를 살펴보고 있기 때문에 Entity Framework에 대해서는 이쯤에서 정리하고 이제 Entity Framework ASP.NET MVC에서 추가하여 사용하는 방법에 대해서 살펴보자.

 

1. Entity Framework 참조하기
    Nuget Gallery를 사용하여 최신버전의 Entity Framework를 참조한다. (Nuget Gallery에 대해서는 아래 Note를 확인하세요.)     

 

 

    

    [그림2 - Neget 패키지 관리] 
    프로젝트에서 Nuget패키지 관리를 선택한다.

 

       

     

   [그림3 - Entity Framework 참조]

   좌측에서 온라인 탭을 선택하고 우측 검색어를 입력한다리스트에 출력된 EntityFramework를 해당 프로젝트에 설치한다패키지 단위로 프로젝트에 참조가 된다현 시점에서는 Entity Framework 4.3.1 이 최신이군요.

   

   

   [그림4 - Entity Framework 개체 속성]

    

 

   참조된 EntityFramework 어셈블리를 확인해보면 버전이나 프로젝트에 참조된 경로를 다음과 같이 확인 할 수 있습니다그럼Entity Framework를 참조하는게 끝났습니다.

 

2. Database 개체들 C# 객체화하기

   소스 코드에서 사용할 객체들을 만들어보겠습니다프로젝트에 ADO.Net 엔터티 데이터 모델 항목을 추가합니다.

 

   

   [그림5 - EDMX 추가]    

    EFModel.edmx를 생성합니다.

 

 

    

    [그림6 - Database 생성]
 
  데이터베이스에서 생성을 선택하고 연결할 데이터베이스를 설정해주세요.

 

 

     

    [그림7 - Entity Framework ConnectionString 설정]

    연결문자열을 선택한 후 다음을 진행합니다쉽게 얻을수 있는 AdventureWorks로 데모를 보여드리겠습니다.

 

 

     

     [그림8 - Database 개체 선택]

     우선 테이블 개체들을 선택해서 가져오겠습니다.

 

3. Object 질의

    기본적인 CRUD 소스코드를 작성해보겠습니다.

   

           

 

        public List<Department> GetDepartmentList()

        {

            using (AdventureWorksEntities ef = new AdventureWorksEntities())

            {

                return ef.Department.ToList();

            }

        }

 

        public Department AddDepartment(Department item)

        {

            using (AdventureWorksEntities ef = new AdventureWorksEntities())

            {

                ef.Department.AddObject(item);

                ef.SaveChanges();

            }

 

            return item;

        }

 

 

        public Department UpdateDepartment(Department item)

        {

            using (AdventureWorksEntities ef = new AdventureWorksEntities())

            {

                ef.Department.Attach(item);

                ef.SaveChanges();

            }

 

            return item;

        }

 

        public bool RemoveDepartment(Department item)

        {

            bool retValue = false;

            using (AdventureWorksEntities ef = new AdventureWorksEntities())

            {

                Department targetItem = ef.Department.SingleOrDefault(x => x.DepartmentID == item.DepartmentID);

                ef.Department.DeleteObject(targetItem);

                int iResult = ef.SaveChanges();

 

                if (iResult > 0)

                    retValue = true;

            }

 

            return retValue;

        }

 

   

 

    자세한 부분은 샘플 프로젝트를 첨부하니 다운받아서 실행하거나 소스코드를 확인해보기를 바란다여기서는 결과 화면만 확인해보겠다.

    

    

    [그림9 - 실행결과]

 

 

 

Note!

Nuget Gallery Visual studio 확장 툴로 참조할 라이브러리를 검색하여 프로젝트에 DLL 참조를 쉽게 제공한다누구나 자신이 만든 라이브러리를 패키징하여 Nuget에 올릴 수도 있고 다운 받을 수 있다온라인으로 검색이 되기 때문에 최신 버전의 패키지를 참조할 수 있다는 부분에서 장점을 갖는다.

 

 


생각보다 글이 길어졌는데 끝까지 읽어주셔서 감사합니다.



훈스닷넷 : http://www.hoons.kr/Lecture/LectureMain.aspx?BoardIdx=50776&kind=60&view=0

Posted by 사나에
개발 이야기/DB2012. 5. 2. 12:16

테이블 명세서 쿼리

--컬럼

SELECT TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION, COLUMN_NAME, DATA_TYPE, ISNULL(CHARACTER_MAXIMUM_LENGTH, '') AS CHARACTER_MAXIMUM_LENGTH

, ISNULL(IS_NULLABLE, '') AS IS_NULLABLE, ISNULL(COLUMN_DEFAULT, '') AS COLUMN_DEFAULT

FROM INFORMATION_SCHEMA.COLUMNS

ORDER BY TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION


-- 테이블

SELECT TABLE_SCHEMA, TABLE_NAME

FROM INFORMATION_SCHEMA.COLUMNS 

GROUP BY TABLE_NAME, TABLE_SCHEMA

ORDER BY TABLE_SCHEMA, TABLE_NAME



-- 프로시져

SELECT * FROM sys.objects 

WHERE TYPE_DESC = 'SQL_STORED_PROCEDURE' 

AND NAME NOT LIKE 'sp_%' 

ORDER BY NAME


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

Declare @EndDate Varchar(8)

SET @EndDate = '20120401'

SELECT CONVERT(Datetime, @EndDate), DATEADD(D, 1, @EndDate)


조회결과


묵시적 형변환을 할 경우 시간이 00:00:00 이다.

BETWEEN 문에서는 하루를 더해서 조회하자.

WHERE @TargetDate BETWEEN StartDate AND DATEADD(D, 1, EndDate)



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

동영상 참고 자료

l  [ORM Framework 동영상 강좌] 01. Entity Framework 들어가기

l  [ORM Framework 동영상 강좌] 02. Entity Framework 4.0 기능 살펴보기

l  [ORM Framework 동영상 강좌] 03. LINQ 알고가자

l  [ORM Framework 동영상 강좌] 04. Database-First VS Model-First

l  [ORM Framework 동영상 강좌] 05. Entity Framework Context

l  [ORM Framework 동영상 강좌] 06. Entity Framework - Entity CRUD

l  [ORM Framework 동영상 강좌] 07. Entity Framework - Entity Stored Procedure 활용(1)

l  [ORM Framework 동영상 강좌] 08. Entity Framework - Entity Stored Procedure 활용(2)

l  [ORM Framework 동영상 강좌] 09. Entity Framework – ASP.NET MVC(1)

l  [ORM Framework 동영상 강좌] 10. Entity Framework – ASP.NET MVC(2)

l  [ORM Framework 동영상 강좌] 11. Entity Framework – ASP.NET MVC(3)

l  [ORM Framework 동영상 강좌] 12. MyBatis.Net 들어가기

l  [ORM Framework 동영상 강좌] 13. MyBatis.NET 기본  환경 설정

l  [ORM Framework 동영상 강좌] 14. MyBatis.NET CRUD(1)

l  [ORM Framework 동영상 강좌] 15. MyBatis.NET CRUD(2)

l  [ORM Framework 동영상 강좌] 16. NHibernate 들어가기

l  [ORM Framework 동영상 강좌] 17. NHibernate xml 파일

l  [ORM Framework 동영상 강좌] 18. NHibernate 실전 - Object Relational Mapping

l  [ORM Framework 동영상 강좌] 19. NHibernate 실전 - CRUD(1)

l  [ORM Framework 동영상 강좌] 20. NHibernate 실전 - CRUD(2)






sqler에 올렸던 동영상을 공유합니다.


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

NHibernate 실전 - CRUD(2)

NHibernate CRUD 두번째 시간입니다이번에는 비지니스 로직을 부분을 어떻게 구현하는지 살펴보겠습니다. CRUD 기본만 잡고가면 그 외 확장기능은 충분히 개발 가능할 것을 확신하기에 기본에 중점을 두고 진행합니다.^^

 

조회 화면

조회하는 뷰페이지에 액션링크에 Shippers Id 키값을 설정해줍니다.

 

            @Html.ActionLink("Edit""Edit"new { id = item.ShipperID }) |

            @Html.ActionLink("Details""Details"new { id = item.ShipperID }) |

            @Html.ActionLink("Delete""Delete"new { id = item.ShipperID })

 

 

 

상세 화면

리스트에서 항목 클릭 시 이동되는 상세 화면을 구성해보겠습니다데이터의 키(id)값을 받아서 해당 데이터를 페이지에 출력하면 됩니다. Id를 인자로 받아서 ISession Get메서드를 사용하여 Shippers의 특정데이터를 조회합니다조회된 데이터는 뷰에 반환하여 페이지를 구성하게 됩니다.

 

        public ActionResult Details(int id)

        {

            ISession session = SessionProvider.Instance.GetSession();

            Shippers shipper = session.Get<Shippers>(id);

 

            return View(shipper);

        }

 

 

위의 Details 메서드가 구성되었다면 상세 뷰를 MVC 스캐폴링 옵션을 사용하여 페이지를 생성 해보겠습니다메서드에서 마우스 오른쪽을 클릭하여 뷰 추가를 선택하세요.

20_01.JPG

[그림 20-1] Controller 추가

 

화면에 매칭할 Model을 선택하고 스캐폴링 옵션에 Details로 선택합니다.

20_02.JPG

[그림 20-2] View 추가

 

추가를 하면 Detail이라는 뷰가 자동으로 생기며 뷰 코드를 보면 자동으로 데이터 상세 값이 출력되도록 구성된다실행 해보겠습니다.

20_03.JPG

[그림 20-3] 상세 화면

 

신규생성

뷰 구성은 위에 스캐폴링을 이용해서 생성해주시면 됩니다그 부분은 생략하고 실제 로직을 살펴보겠습니다데이터 추가하는 메서드입니다. Shippers 객체를 받아서 바로 처리합니다.

 

        [HttpPost]

        public ActionResult Create(Shippers shipper)

        {

            ISession session = SessionProvider.Instance.GetSession();

            ITransaction trans = null;

            try

            {

                trans = session.BeginTransaction();

                session.Save(shipper);

                session.Flush();

                trans.Commit();

                return RedirectToAction("Index");

            }

            catch

            {

                trans.Rollback();

                return View();

            }

        }

 

 

NHibernate는 자체 Transaction 처리가 가능합니다. ITransaction 객체를 사용하시면 됩니다데이터를 수정하거나 추가삭제처럼 데이터 변경이 발생하는 경우는 데이터베이스와 동기화를 위해 ISession.Flush()를 반드시 호출해줘야 합니다.

 

 

수정

다음은 수정입니다신규생성과 마찬가지로 Shippers 객체를 인자로 받아옵니다. ISession의 Merge메서드를 통해서 데이터 수정이 처리됩니다.

 

        [HttpPost]

        public ActionResult Edit(Shippers shipper)

        {

            ISession session = SessionProvider.Instance.GetSession();

            ITransaction trans = null;

            try

            {

                trans = session.BeginTransaction();

                session.Merge(shipper);

                session.Flush();

                trans.Commit();

            }

            catch

            {

                trans.Rollback();

            }

            return RedirectToAction("Index");

        }

 

 

 

삭제

마지막으로 데이터 삭제입니다. Shippers 테이블은 ShipperID Identity로 가지고 있기때문에 id를 인자로 받아와서 처리합니다.처리 후에 리스트화면으로 이동합니다데이터 삭제 시에는 ISession의 Delete 메서드를 이용합니다.

 

        public ActionResult Delete(int id)

        {

            ISession session = SessionProvider.Instance.GetSession();

            Shippers shipper = session.Get<Shippers>(id);

 

            ITransaction trans = null;

            try

            {

                trans = session.BeginTransaction();

                session.Delete(shipper);

                session.Flush();

                trans.Commit();

                return RedirectToAction("Index");

            }

            catch

            {

                trans.Rollback();

                return View();

            }

        }

 

 

실제로 화면 하나하나 캡처하면 내용이 길어져서 소스코드면 소개를 해드렸습니다소스를 첨부해드릴테니 받아서 한번씩 실행해보면 더 쉽게 이해되시리라 생각합니다. NHibernate는 견고하고 데이터 처리에 필요한 기본적인 기능들을 제공하고 있습니다. (트랜잭션 처리같은… ) Table과 Object의 매핑이라는 점이 핵심이라고 볼 수 있겠네요이렇게 잛게 기본적인 NHibernate 활용편을 살펴보았습니다읽어주셔서 감사합니다.^^

 

소스코드 : NHibernateDemo.zip



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

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



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

NHibernate 실전 - CRUD(1)

MyBatis.Net 경우 쿼리의 결과를 Object로 가져온다면 NHibernate는 데이터 테이블을 Object로 가져오기때문에 앞에서 살펴봤던Entity Framework처럼 이해하면 쉬울 듯합니다이번은 앞세션에 이어서 Object 매핑 데이터를 조회하는 부분을 살펴보겠습니다.

 

NHibernate's ISession

NHibernate ISession 객체를 사용하여 데이터 저장소로 부터 원하는 데이터를 가져오겠습니다. ISessionFactory로부터ISession을 얻을 수 있다.

다음 2개의 네임스페이스를 추가해주세요.

using NHibernate;

using NHibernate.Cfg;

 

SessionProvider.cs 입니다.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using NHibernate;

using NHibernate.Cfg;

 

namespace NHibernateDemo

{

    public class SessionProvider

    {

        private ISession _session;

        private ISessionFactory _sessionFac;

        private bool _reuseSession;

 

        #region Thread-safe Singleton

 

        public static SessionProvider Instance

        {

            get

            {

                return Nested.TheSingleton;

            }

        }

 

        private SessionProvider()

        {

            // Read the configuration

            Configuration cfg = new Configuration();

            cfg.AddAssembly("NHibernateDemo");

 

            _sessionFac = cfg.BuildSessionFactory();

            _reuseSession = false;

        }

 

        private class Nested

        {

            static Nested() { }

            internal static readonly SessionProvider

                TheSingleton = new SessionProvider();

        }

 

        #endregion

 

 

        /// <summary>

        /// Should the session be reused? If

        /// this property is false (default), a Session-Per-Request

        /// is applied.

        /// </summary>

        public bool ReuseSession

        {

            get

            {

                return _reuseSession;

            }

            set

            {

                _reuseSession = value;

            }

        }

 

        /// <summary>

        /// Get the current session. If the session is null,

        /// Open a new Session

        /// </summary>

        /// <returns>ISession-Object</returns>

        public ISession GetSession()

        {

            if (_session == null)

                _session = _sessionFac.OpenSession();

 

            return _session;

 

        }

 

        /// <summary>

        /// Close a Session, if the flag ReuseSession is false

        /// </summary>

        public void CloseSession()

        {

            if (_session != null)

            {

                if (!_reuseSession)

                {

                    _session.Close();

                    _session = null;

                }

            }

        }

    }

}

 

 

 

빌드 리소스 포함

매핑 Xml 파일은 빌드 시 리소스에 포함되어야 합니다다음과 같이 설정해주세요.

19_01.JPG

[그림 19-1] xml 속성 메뉴

 

Xml 파일 속성에서 Build Action에서 리소스 포함을 선택해주세요그럼 빌드시 매핑 xml파일이 자동으로 포함됩니다.

19_02.JPG

[그림 19-2] xml 속성

 

조회 화면

~~ 기다리고 기다리던 조회화면입니다이것을 하기 위해 우린 위!~~~~ 많은것들을 설정했나봅니다ㅋㅋㅋㅋ MVC 프로젝트임으로 Controller를 하나 추가하겠습니다기본적인 메서드들을 자동 추가하겠습니다.

19_03.JPG

[그림 19-3] Controller 추가

 

ShipperController 클래스에 다음 네임스페이스를 추가해주세요.

using NHibernate;

using NHibernate.Cfg;

using NHibernateDemo.Entities;

 

리스트를 조회하는 코드를 다음과 같이 작성합니다코드를 살펴보면 SessionProvider에서 ISession을 얻어와서 CreateCriteria 메서드를 통해서 기본 Shippers 객체를 반환합니다받아온 객체를 바로 뷰에 반환해줍니다.

 

        public ActionResult Index()

        {

            IList<Shippers> list = null;

            try

            {

                ISession session = SessionProvider.Instance.GetSession();

                NHibernate.ICriteria ctiq = session.CreateCriteria(typeof(Shippers));

                list = ctiq.List<Shippers>();

            }

            catch (Exception ex)

            {

                throw;

            }

 

            return View(list);

        }

 

 

Index 뷰를 생성해보겠습니다모델 클래스를 Shippers로 설정 해주셔야 합니다.

19_04.JPG

[그림 19-4] View 추가

 

뷰에서 자동으로 리스트 코드가 작성됩니다. Shippers 클래스가 리스트에 매칭되었습니다웹 페이지를 실행해보겠습니다.

19_05.JPG

[그림 19-5] 리스트 화면 출력

 

리스트가 주~~욱 출력이 되고 있습니다그 어느때보다 기쁘네요^^ 사실 xml때문에 삽질을 한터라 ㅋㅋㅋ 따라하시느라 정신이 없을 수도 있지만 핵심은 데이터베이스의 테이블과 클래스 매핑을 xml파일에 정의되고 NHibernate Session을 통해서 실제 데이터를 조회하거나 액션을 취하게 됩니다다음 세션에서는 이번에 이어서 수정삭제신규생성 하는 비지니스 로직을 확인해보겠습니다감사합니다.^^


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

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


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

NHibernate 실전 – Object Relational Mapping

벌써 18번째 세션을 진행하게 되었습니다. Entity Framework 4.0에서 MyBatis.Net 그리고 NHibernate까지 보통 ORM 프레임워크라고 불리는 것들에 대해서 살펴보았는데요이번에 알아볼 내용은 ORM!! NHibernate에서 말하는 Object Relational Mapping에 대해서 알아보겠습니다.

 

실전프로젝트 기본 구성

이번 세션부터 기본적인 사항들을 확인해서 실전으로 CRUD까지 작업을 해보겠습니다. MVC Razor 웹 프로젝트를 하나 생성해주세요. Entity Framework를 되새기면서 해주시면 됩니다.

18_01.JPG

[그림 18-1] 웹 프로젝트 추가

 

MVC 웹 프로젝트를 다음과 같이 구성하려합니다미리 참고해주세요.

18_02.JPG

[그림 18-2] 프로젝트 구성도

 

Web.config에 Database Connection 정보를 입력해주세요.

 

  <configSections>

    <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/>

  </configSections>

  <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">

    <session-factory name="NHibernateDemo">

      <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>

      <property name="connection.connection_string">

        Data Source=JISEON-PC\JISEON2;Initial Catalog=Northwind;Persist Security Info=True;User ID=sa;Password=P@ssw0rd;

      </property>

      <property name="adonet.batch_size">10</property>

      <property name="show_sql">true</property>

      <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>

      <property name="use_outer_join">true</property>

      <property name="command_timeout">60</property>

      <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>

      <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>

    </session-factory>

  </hibernate-configuration>

 

 

NHibernate 관련 DLL을 참조해주세요. NHibernate에서 다운받은 폴더에 있습니다.

l  NHibernate.dll

l  Iesi.Collections.dll

l  NHibernate.ByteCode.LinFu.dll

l LinFu.DynamicProxy.dll 

 

 

DataTable Object

NHibernate는 데이터 테이블을 기준으로 객체를 매핑합니다매핑은 xml파일에서 정의가 되어지며 앞세션에서 말했듯이<table>.hbn.xml으로 생성됩니다백마디 말보다 한번 보여드리는게 더 와닿지요~

Northwind 데이터베이스 Shippers 테이블 스키마입니다.

18_03.JPG

[그림 18-3] Shippers 테이블 구조

 

테이블 구조에 맞게 Shippers 클래스를 구성해보겠습니다.

18_04.JPG

[그림 18-4] Shippers 테이블 구조

 

Shippers 클래스입니다.

 

    public class Shippers

    {

        private int _shipperID;

        private string _companyName;

        private string _phone;

 

        public Shippers()

        {

        }

 

        public virtual int ShipperID

        {

            get { return _shipperID; }

            set { _shipperID = value; }

        }

 

        public virtual string CompanyName

        {

            get { return _companyName; }

            set { _companyName = value; }

        }

 

        public virtual string Phone

        {

            get { return _phone; }

            set { _phone = value; }

        }

    }

 

 

Database의 테이블과 객체 매핑을 해주는 아래 정의된 xml파일입니다파일명은 테이블명을 앞에두고 뒤에 hbn.xml로 설정하면 됩니다“Shippers.hbm.xml”

 

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="NHibernateDemo"assembly="NHibernateDemo">

 

  <class name="NHibernateDemo.Entities.Shippers" table="Shippers">

    <id name="ShipperID" column="ShipperID" type="Int32" unsaved-value="-1" access="field.camelcase-underscore">

      <generator class="identity" />

    </id>

    <property name="CompanyName" column="CompanyName" type="string" length="40" not-null="true"access="field.camelcase-underscore"/>

    <property name="Phone" column="Phone" type="string" length="24" access="field.camelcase-underscore"/>

 

  </class>

</hibernate-mapping>

 

 

 

Tip!

Visual Studio에 익숙한 여러분은 실제로 위에 xml파일들을 수동으로 설저아는게 결코 쉬운일은 아닐겁니다저 역시도 xml설정하는데 대소문자며 공백등으로 어려움이 있었고요 ㅋㅋㅋ NHibernate에서 다운받은 파일 중에 Required_Bins 폴더에 xsd 스키마 파일이 존재합니다.

 

Visual Studio 2010에서 XML 메뉴를 클릭합니다. Schemas.. 하위 메뉴를 클릭해서 위에서 봤던 스키마 파일을 추가하겠습니다.

18_05.JPG

[그림 18-5] XML 메뉴

 

2개 다 추가해주세요!

18_06.JPG

[그림 18-6] NHibernate에서 제공하는 스키마

 

로드된 xsd 파일을 인텔리센스에 적용합니다.

18_07.JPG 

[그림 18-7] XML Schemas

 

이제 xml 파일에서 문자를 입력하면 아래와 같이 인텔리센스 기능이 바로 사용됩니다. 후훗~

18_08.JPG 

[그림 18-8] XML Intellisense

 

이번 세션에서는 기본 프로젝트를 생성하고 Shippers 객체를 매핑해보았습니다다음 시간은 이 객체를 가져다 쓰는 방법에 대해서 알아보겠습니다끝까지 읽어주셔서 감사합니다.^^


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

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

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

NHibernate xml 파일

NHibernate ORM으로 XML에서 설정을 한다오늘은 NHibernate 프로젝트 관련하여 포함된 Config 파일 및 객체 정의하는xml파일들을 살펴보고자한다지난 세션에서 소개한 NHibernate 사이트에서 NH3.1.0 다운로드르 받으면 xml 파일 템플릿이 제공되고 있다.

 

Configuration_Templates

다운받은 파일의 \NHibernate-3.1.0.GA-bin\Configuration_Templates 폴더에 Database 설정 관련 xml이 존재한다.

17_01.jpg

[그림 17-1] Database 정의 xml

 

MSSQL.cfg.xml 파일을 열어보자. MS SQL Server 연결관련 정보가 설정되어 있다우리는 여기 정보를 프로젝트 app.config web.config에 정의하게 될 것이다.

<?xml version="1.0" encoding="utf-8"?>

<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >

             <session-factory name="NHibernate.Test">

                           <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>

                           <property name="connection.connection_string">

                                        Server=(local);initial catalog=nhibernate;Integrated Security=SSPI

                           </property>

                           <property name="adonet.batch_size">10</property>

                           <property name="show_sql">false</property>

                           <property name="dialect">NHibernate.Dialect.MsSql2000Dialect</property>

                           <property name="use_outer_join">true</property>

                           <property name="command_timeout">60</property>

                           <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>

                           <propertyname="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>

             </session-factory>

</hibernate-configuration>   

 

 

<table>.hbm.xml 정의

NHibernate는 테이블 기준으로 매핑을 합니다하여 테이블마다 xml 파일이 존재한다고 보시면 됩니다샘플로 하나 살펴보겠습니다구조만 확인을 해주세요저희가 자주사용하는 Northwind 데이터베이스 Shippers 테이블을 정의해놓은 파일입니다.Shippers.hbm.xml 으로 파일이 생성됩니다클래스와 데이블간의 매핑을 시켜주는 역할입니다.

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="NHibernateDemo"assembly="NHibernateDemo">

  <class name="NHibernateDemo.Entities.Shippers" table="Shippers">

    <id name="ShipperID" column="ShipperID" type="Int32" unsaved-value="-1" access="field.camelcase-underscore">

      <generator class="identity" />

    </id>

    <property name="CompanyName" column="CompanyName" type="string" length="40" not-null="true"access="field.camelcase-underscore"/>

    <property name="Phone" column="Phone" type="string" length="24" access="field.camelcase-underscore"/>

 

  </class>

</hibernate-mapping>

 

 

Generators 요소

모든 generators는 NHibernate.Id.IIdentifierGenerator에서 구현됩니다.

l Increment : 다른 프로세스에서 데이터가 추가되지 않는 경우 유니크하게 사용되는 식별자로 클러스터에서는 사용을 금지합니다.

l Identity : DB2, MySQL, MS SQL Server 그리고 Sybase 데이터 베이스에서 지원하는 식별자 컬럼입니다.

l Sequence : DB2, PostgreSQL, Oracle 또는 Firebird의 generator에서 사용되는 순서입니다이 식별자는 Convert.ChangeType속성 타입을 사용하여 변환합니다.

l Hilo : hi/lo 알고리즘 사용으로 integral 타입의 식별자를 효과적으로 생성합니다. hi/lo 알고리즘은 특정 데이터베이스에서 고유 식별자를 생성하기도 합니다.

l Seqhilo : hi/lo 알고리즘을 사용하여 효과적인 integral 타입의 식별자를 생성하며 데이터베이스 순서가 명명됩니다.

l uuid.hex : System.Guid와 ToString 메서드로 문자열 타입의 식별자를 생성합니다문자열 길이는 구성 포맷에 따릅니다.

l uuid.string : 새로운 System.Guid가 문자열로 변환되는 byte[]으로 생성합니다.

l Guid : 새로운 System.Guid 식별자입니다.

l guid.comb : Jimmy Nilsson이 설명한(http://www.informit.com/articles/article.asp?p=25862) 새로운 System.Guid을 생성하는 알고리즘을 사용합니다.

l Native : 기본적인 데이터베이스의 기능에 따라 지정됩니다.

l Assigned : 응용프로그램에서 Save()이 호출되기 전에 객체 식별자를 지정합니다.

l Foreign : 다른 연관된 객체의 식별자를 사용합니다일반적으로 <one-to-one> 기본키가 사용됩니다.

 

NHibernate Type

Xml 파일 컬럼에 타입을 정의할 때 NHibernate Type으로 정의해야한다닷넷 타입과 데이터베이스 타입을 정리해놓은 것이다기본적으로 자주 사용되는 항목만 표시합니다더 자세한 항목은 NHibernate 가이드 문서에 제공되고 있습니다.

NHibernate Type

.NET Type

Database Type

AnsiChar

System.Char

Db - Type.AnsiStringFixedL ength - 1 char

Boolean

System.Boolean

DbType.Boolean

Byte

System.Byte

DbType.Byte

Char

System.Char

Db- Type.StringFixedLengt h - 1 char

DateTime

System.DateTime

DbType.DateTime – ignores the milliseconds

Decimal

System.Decimal

DbType.Decimal

Double

System.Double

DbType.Double

Guid

System.Guid

DbType.Guid

Int16

System.Int16

DbType.Int16

Int32

System.Int32

DbType.Int32

Int64

System.Int64

DbType.Int64

PersistentEnum

System.Enum

The DbType for the underlying value.

Single

System.Single

DbType.Single

Ticks

System.DateTime

DbType.Int64

TimeSpan

System.TimeSpan

DbType.Int64

NHibernate 경우 선수지식이 필요한 프레임워크입니다이번 세션에서는 기본적으로 알아둬야하는 사항을 몇가지 정리하였습니다작업을 하시다가 필요할때마다 참고하시면 좋을것 같습니다.^^


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

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


Posted by 사나에