공간 - Code First
참고 항목
EF5 이상만 - 이 페이지에서 다루는 기능, API 등은 Entity Framework 5에 도입되었습니다. 이전 버전을 사용하는 경우 이 정보의 일부 또는 전체가 적용되지 않습니다.
이 비디오 및 단계별 연습에서는 Entity Framework Code First에서 공간 형식을 매핑하는 방법을 보여줍니다. 또한 LINQ 쿼리를 사용하여 두 위치 간의 거리를 찾는 방법을 보여줍니다.
이 연습에서는 Code First를 사용하여 새 데이터베이스를 만들지만 기존 데이터베이스에 Code First를 사용할 수도 있습니다.
공간 형식 지원은 Entity Framework 5에서 도입되었습니다. 공간 형식, 열거형 및 테이블 반환 함수와 같은 새로운 기능을 사용하려면 .NET Framework 4.5를 대상으로 해야 합니다. Visual Studio 2012는 기본적으로 .NET 4.5를 대상으로 합니다.
공간 데이터 형식을 사용하려면 공간 지원이 있는 Entity Framework 공급자도 사용해야 합니다. 자세한 내용은 공간 형식에 대한 공급자 지원을 참조하세요.
두 가지 주요 공간 데이터 형식인 지리 및 기하 도형이 있습니다. 지리 데이터 형식은 타원 데이터(예: GPS 위도 및 경도 좌표)를 저장합니다. 기하 도형 형식은 유클리드(평면) 좌표계의 데이터를 나타냅니다.
비디오 보기
이 비디오에서는 Entity Framework Code First를 사용하여 공간 형식을 매핑하는 방법을 보여줍니다. 또한 LINQ 쿼리를 사용하여 두 위치 간의 거리를 찾는 방법을 보여줍니다.
발표자: 줄리아 코르니치
필수 구성 요소
이 연습을 완료하려면 Visual Studio 2012, Ultimate, Premium, Professional 또는 Web Express 버전이 설치되어 있어야 합니다.
Project 설정
- Visual Studio 2012를 엽니다.
- 파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.
- 왼쪽 창에서 Visual C#을 클릭한 다음 콘솔 템플릿을 선택합니다.
- 프로젝트 이름으로 SpatialCodeFirst를 입력하고 확인을 클릭합니다.
Code First를 사용하여 새 모델 정의
Code First 개발을 사용하는 경우 일반적으로 개념적(도메인) 모델을 정의하는 .NET Framework 클래스를 작성하는 것으로 시작합니다. 아래 코드는 University 클래스를 정의합니다.
University에는 DbGeography 유형의 Location 속성이 있습니다. DbGeography 형식을 사용하려면 System.Data.Entity 어셈블리에 대한 참조를 추가하고 System.Data.Spatial using 문도 추가해야 합니다.
Program.cs 파일을 열고 파일 맨 위에 using 문을 추가합니다.
using System.Data.Spatial;
Program.cs 파일에 다음 University 클래스 정의를 추가합니다.
public class University
{
public int UniversityID { get; set; }
public string Name { get; set; }
public DbGeography Location { get; set; }
}
DbContext 파생 형식 정의
엔터티를 정의하는 것 외에도 DbContext에서 파생되고 DbSet<TEntity> 속성을 노출하는 클래스를 정의해야 합니다. DbSet<TEntity> 속성은 모델에 포함하려는 형식을 컨텍스트에 알립니다.
DbContext 파생 형식의 인스턴스는 런타임 중에 엔터티 개체를 관리합니다. 여기에는 데이터베이스의 데이터로 개체 채우기, 변경 내용 추적 및 데이터베이스에 데이터 유지가 포함됩니다.
DbContext 및 DbSet 형식은 EntityFramework 어셈블리에 정의되어 있습니다. NuGet 패키지를 사용하여 이 DLL에 대한 참조를 추가합니다.
- 솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 단추로 클릭합니다.
- NuGet 패키지 관리...를 선택합니다.
- NuGet 패키지 관리 대화 상자에서 온라인 탭을 선택하고 EntityFramework 패키지를 선택합니다.
- 설치를 클릭합니다.
EntityFramework 어셈블리 외에도 System.ComponentModel.DataAnnotations 어셈블리에 대한 참조도 추가됩니다.
Program.cs 파일의 맨 위에 다음 using 문을 추가합니다.
using System.Data.Entity;
Program.cs에서 컨텍스트 정의를 추가합니다.
public partial class UniversityContext : DbContext
{
public DbSet<University> Universities { get; set; }
}
데이터 유지 및 검색
Main 메서드가 정의된 Program.cs 파일을 엽니다. Main 함수에 다음 코드를 추가합니다.
이 코드는 컨텍스트에 두 개의 새 University 개체를 추가합니다. 공간 속성은 DbGeography.FromText 메서드를 사용하여 초기화됩니다. WellKnownText로 표시되는 지리 지점이 메서드에 전달됩니다. 그런 다음 코드는 데이터를 저장합니다. 그런 다음 해당 위치가 지정된 위치에 가장 가까운 University 개체를 반환하는 LINQ 쿼리가 생성되고 실행됩니다.
using (var context = new UniversityContext ())
{
context.Universities.Add(new University()
{
Name = "Graphic Design Institute",
Location = DbGeography.FromText("POINT(-122.336106 47.605049)"),
});
context. Universities.Add(new University()
{
Name = "School of Fine Art",
Location = DbGeography.FromText("POINT(-122.335197 47.646711)"),
});
context.SaveChanges();
var myLocation = DbGeography.FromText("POINT(-122.296623 47.640405)");
var university = (from u in context.Universities
orderby u.Location.Distance(myLocation)
select u).FirstOrDefault();
Console.WriteLine(
"The closest University to you is: {0}.",
university.Name);
}
애플리케이션을 컴파일하고 실행합니다. 프로그램에서는 다음이 출력됩니다.
The closest University to you is: School of Fine Art.
생성된 데이터베이스 보기
애플리케이션을 처음 실행하면 Entity Framework에서 데이터베이스를 만듭니다. Visual Studio 2012가 설치되어 있으므로 데이터베이스가 LocalDB 인스턴스에 만들어집니다. 기본적으로 Entity Framework는 파생 컨텍스트의 정규화된 이름 뒤에 데이터베이스 이름을 지정합니다(이 예제에서는 SpatialCodeFirst.UniversityContext). 이후 기존 데이터베이스가 사용됩니다.
데이터베이스를 만든 후 모델을 변경하는 경우 Code First 마이그레이션 사용하여 데이터베이스 스키마를 업데이트해야 합니다. 마이그레이션 사용 예제는 새 데이터베이스에 대한 Code First를 참조하세요.
데이터베이스 및 데이터를 보려면 다음을 수행합니다.
- Visual Studio 2012 기본 메뉴에서 보기 ->SQL Server 개체 탐색기를 선택합니다.
- LocalDB가 서버 목록에 없는 경우 SQL Server를 마우스 오른쪽 단추를 클릭하고 SQL Server 추가 기본 Windows 인증을 사용하여 LocalDB 인스턴스에 연결을 선택합니다.
- LocalDB 노드 확장
- 데이터베이스 폴더를 펼쳐 새 데이터베이스를 확인하고 Universities 테이블로 이동합니다.
- 데이터를 보려면 테이블을 마우스 오른쪽 단추로 클릭하고 데이터 보기를 선택합니다.
요약
이 연습에서는 Entity Framework Code First에서 공간 형식을 사용하는 방법을 살펴보았습니다.
.NET