엔티티 프레임워크(EF) 코어는 인기 있는 엔티티 프레임워크 데이터 접근 기술의 경량, 확장 가능, 오픈 소스 및 크로스 플랫폼 버전입니다.
EF 코어는 객체-관계형 매퍼(O/RM)로 사용되어, .NET 개발자들이 .NET 객체가 있는 데이터베이스를 다룰 수 있어 데이터 접근 코드를 자주 작성하지 않아도 됩니다.
데이터베이스 제공자:하이퍼링크 로그인이 보입니다.
이 글에서 사용한 환경:
- 오픈 툴즈: VS 2017
- 닷넷 버전: 2.1.301
- 데이터베이스: SQL Sever 2012
프로젝트 만들기
1: BaiDuPan.WebUI는 핵심 웹 애플리케이션을 만드는 ASP.NET 입니다;
2: BaiDuPan.DomainModel은 클래스 라이브러리(.NET Core)를 생성하는 것;
엔터티 프레임워크 핵심 참조 추가하기
vs2017로 개발되었습니다. NET Framework 프로젝트에서 ef 6를 추가할 때, 아래 그림과 같이 프로젝트를 우클릭하여 직접 추가할 수 있습니다:
하지만 EF 코어는 위에서 언급한 방식으로 추가할 수 없습니다.
PM 명령:
위 명령에 따라,프로그램은 필요한 의존성 패키지를 자동으로 추가합니다따라서 Microsoft.EntityFrameworkCore 패키지를 추가할 필요가 없습니다.
맥락 및 엔터티 모델 추가
영화 모델:
PanDb 데이터베이스 상황:
데이터베이스 문맥 의존성 주입을 추가하는 스타트업 클래스 (여기서는 WebUI에 DomainModel 참조를 추가해야 합니다):
위 코드는 프로젝트가 Microsoft.EntityFrameworkCore.SqlServer를 참조하도록 요구하지만, BaiDuPan.WebUI는 Microsoft.EntityFrameworkCore.SqlServer를 참조할 필요가 없는데, 왜 오류가 보고되지 않나요?
Microsoft.AspNetCore.App 패키지는 ASP.NET Core 2.1 이후 버전과 Entity Framework Core 2.1 이후 버전의 모든 기능을 포함하고 있습니다. Core 2.1 이후 버전의 기본 프로젝트 템플릿 ASP.NET 이 패키지를 사용합니다. Microsoft.AspNetCore.App 패키지는 ASP.NET Core 2.1 이후 버전과 Entity Framework Core 2.1 이후 애플리케이션에 권장됩니다.
appsettings.json 데이터베이스 연결 문자열을 구성하세요:
다음 오류로 프로젝트를 시작해 보세요:
오류 NU1107은 Microsoft.EntityFrameworkCore에서 버전 충돌을 감지합니다. 프로젝트에서 직접 패키지를 참조하면 이 문제가 해결됩니다. BaiDuPan.WebUI -> BaiDuPan.DomainModel -> Microsoft.EntityFrameworkCore.SqlServer 2.2.4 -> Microsoft.EntityFrameworkCore.Relational 2.2.4 -> Microsoft.EntityFrameworkCore (>= 2.2.4) BaiDuPan.WebUI -> Microsoft.AspNetCore.App 2.1.1 -> Microsoft.EntityFrameworkCore (>= 2.1.1 && < 2.2.0). BaiDuPan.WebUI C:\Users\itsvse_pc\Source\Repos\baidupan\BaiDuPan.WebUI\BaiDuPan.WebUI\BaiDuPan.WebUI.csproj 1 그 이유는 두 프로젝트 간에 버전 충돌이 있기 때문입니다. BaiDuPan.WebUI에 ef core의 상위 버전을 설치해 보세요. 새로운 오류는 다음과 같습니다:
PM> install-package Microsoft.EntityFrameworkCore.SqlServer -version 2.2.4 가져오기https://api.nuget.org/v3/registr ... qlserver/index.json 캐시https://api.nuget.org/v3/registr ... qlserver/index.json C:\Users\itsvse_pc\Source\Repos\baidupan\BaiDuPan.WebUI\BaiDuPan.WebUI\BaiDuPan.WebUI.csproj의 패키지를 되돌리기...
NU1608: 检测到的包版本在依赖项约束之外: Microsoft.AspNetCore.App 2.1.1 需要 Microsoft.EntityFrameworkCore.SqlServer (>= 2.1.1 && < 2.2.0),但版本 Microsoft.EntityFrameworkCore.SqlServer 2.2.4 已解决。 설치-패키지: NU1107: Microsoft.EntityFrameworkCore에서 버전 충돌이 감지됨. 프로젝트에서 직접 패키지를 참조하면 이 문제가 해결됩니다. BaiDuPan.WebUI -> Microsoft.EntityFrameworkCore.SqlServer 2.2.4 -> Microsoft.EntityFrameworkCore.Relational 2.2.4 -> Microsoft.EntityFrameworkCore (>= 2.2.4) BaiDuPan.WebUI -> Microsoft.AspNetCore.App 2.1.1 -> Microsoft.EntityFrameworkCore (>= 2.1.1 && < 2.2.0). 위치 라인: 1 등장인물: 1 + install-package Microsoft.EntityFrameworkCore.SqlServer -version 2.2. ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 카테고리정보: NotSpecified: (:) [설치-패키지], 예외 + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
install-package: 패키지 복원 실패. "BaiDuPan.WebUI"의 패키지 변경 사항 롤백. 위치 라인: 1 등장인물: 1 + install-package Microsoft.EntityFrameworkCore.SqlServer -version 2.2. ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 카테고리정보: NotSpecified: (:) [설치-패키지], 예외 + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand
도착 시간: 00:00:01.4208784 쪽지>
어떻게 해야 할까요? 해답은 다음과 같습니다:
다운그레이드, BaiDuPan.WebUI 프로젝트는 Microsoft.EntityFrameworkCore 2.1.1을 참조하므로, BaiDuPan.DomainModel 프로젝트에서 nuget 명령을 다음과 같이 다시 실행합니다:
이렇게 하면 모든 프로젝트가 동일한 EF Core 버전을 갖도록 보장합니다.
데이터베이스 초기화
데이터베이스와 테이블은 다음 이미지에서 보듯이 성공적으로 생성됩니다:
MovieController 컨트롤러 추가하세요
코드는 다음과 같습니다:
인덱스 메서드는 데이터베이스 Movie 테이블의 모든 데이터를 조회하는 것이고, Create 메서드는 새 데이터를 추가하는 것입니다. 아래 그림과 같이 Postman으로 데이터를 추가해 요청해 보겠습니다:
하이퍼링크 로그인이 보입니다.POST 요청
프로그램은 원활하게 실행되었고, 예외가 없어 삽입이 성공적이었음을 증명했으며, 접근 시도가 이루어졌습니다:하이퍼링크 로그인이 보입니다.아래 그림에 표시된 모든 데이터를 조회하세요:
수정과 삭제에 관해서는 말할 필요도 없습니다!
리소스:
엔터티 프레임워크 코어:하이퍼링크 로그인이 보입니다.
ASP.NET 코어:하이퍼링크 로그인이 보입니다.
(끝)
|