• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

Database-First 방식으로 MS SQL View도 객체화해서 가져오는 방법

21.02.02 09:12 작성 조회수 193

0

안녕하세요^^

혹시 Database-First 방식으로 MS SQL View도 객체화해서 자동으로 모델 엔티티 형식으로 가져올수 있는 방법이 있을까요?

답변 3

·

답변을 작성해보세요.

0

vyrudaks님, 도움이 되셨다니 저도 기쁩니다.

즐거운 코딩하세요!

0

vyrudaks님의 프로필

vyrudaks

질문자

2021.02.02

말씀 감사합니다! 많은 도움이 되었습니다 

0

vyrudaks님, 반갑습니다.

물론, 가져올 수 있는 방법이 있습니다.

⭐ 간단히 말씀드리면, .Net Core 3.x부터 지원되는 HasNoKeyToView 메서드를 사용하면 가능합니다.

강의에서 진행했던 NetCore 솔루션과 관련해 말씀드리겠습니다. (스압에 주의하세요.)

(1) 먼저, NetCore.Data 프로젝트의 Classes 폴더에 uvwUserEmail 클래스를 생성하세요.

public class uvwUserEmail {

        public string UserId { get; set; }

        public string UserEmail { get; set; }

}

(2)-1. 그 다음에, NetCore.Services 프로젝트의 Data 폴더에 있는 DBFirstDbContext의 OnModelCreating 메서드에 다음 내용을 추가하세요.

modelBuilder.Entity<uvwUserEmail >().HasNoKey();

modelBuilder.Entity<uvwUserEmail >().ToView(name: "uvwUserEmail ");

Db View는 Primary Key가 없기 때문에 HasNoKey 메서드를 지정하고, ToView 메서드를 통해 뷰이름을 정하면서 uvwUserEmail이 뷰로 사용될 클래스라는 것을 알려주는 용도입니다.

(2)-2. 그런데, 현재 NetCore.Services 프로젝트가 .Net Core 2.1버전이기 때문에 Project File을 열어서 TargetFramework를 netcoreapp2.1에서 netcoreapp3.1로 변경하세요.

(2)-3. 또한, PackageReference도 Microsoft.EntityFrameworkCore와 Microsoft.EntityFrameworkCore.SqlServer에 대해 각각 3.1.11 버전으로 업그레이드해 주세요.

(HasNoKey와 ToView 메서드가 3.x 버전에서 추가된 메서드이기 때문에 이러한 작업들이 필요합니다.)

(2)-4. DBFirstDbContext 내부에 다음의 변수도 추가해 주세요.

public virtual DbSet<uvwUserEmail> UserEmails { get; set; }

(3) SQL Server Management Studio를 열어서 DBFirstDB 데이터베이스에 다음과 같이 dbo.uvwUserEmail 뷰를 생성합니다.

CREATE VIEW dbo.uvwUserEmail

AS

SELECT UserId, UserEmail

FROM dbo.[User]

GO

(4) 이제, 마지막으로 UserService 클래스에 아래의 메서드를 추가한 후에 테스트해 주세요.

public List<uvwUserEmail> GetUserEmails() {

        return _context.UserEmails.FromSqlRaw("SELECT UserId, UserEmail FROM dbo.uvwUserEmail")

                           .ToList();

}

이렇게 한 후에 GetUserEmails() 메서드를 호출해서 사용하시면 됩니다.

이상입니다.

즐거운 하루되세요.