Entity Framework Core 튜토리얼
Entity Framework 코어 시작하기
수색…
비고
Entity Framework (EF) 코어는 널리 사용되는 Entity Framework 데이터 액세스 기술의 가볍고 확장 가능한 버전입니다.
EF Core는 .NET 개발자가 .NET 객체를 사용하여 데이터베이스 작업을 수행 할 수있게 해주는 O / RM (object-relational mapper)입니다. 개발자가 일반적으로 작성해야하는 대부분의 데이터 액세스 코드가 필요하지 않습니다.
프로젝트에 패키지 추가하기
EntityFrameworkCore를 프로젝트에 추가하려면 project.json 파일을 업데이트하십시오 ( dependencies 및 tools 섹션에 새 행 추가).
"dependencies": {
...
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
"Microsoft.EntityFrameworkCore.Design": {
"version": "1.0.0",
"type": "build"
},
},
"tools": {
...
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
}
dotnet restore 를 실행하여 실제로 인터넷에서이 패키지를 다운로드하는 것을 잊지 마십시오.
Microsoft SQLServer 이외의 RDBMS를 사용하는 경우 - Microsoft.EntityFrameworkCore.SqlServer 를 올바른 버전으로 대체 Microsoft.EntityFrameworkCore.SqlServer ( Microsoft.EntityFrameworkCore.Sqlite , Npgsql.EntityFrameworkCore.PostgreSQL 또는 기타 - RDBMS 설명서에서 권장 패키지를 참조하십시오).
클래스 라이브러리 및 SQL Server를 사용하는 Entity Framework 코어의 첫 번째 데이터베이스
좋아요. 그래서 여기에 대해 알아내는 데 하루가 걸렸습니다. .NET Core Web App을 사용하여 데이터베이스 Class Project (.NET Core) 에서 사용하기 위해 수행 한 단계를 게시하고 있습니다.
1 단계 - .NET Core 설치
확실히 DNX가 아닌 .NET 코어를 사용하고 있는지 확인하십시오 (Hint: You should be able to see the .NET Core option when creating a New Project) - 여기 에서 다운로드하지 않은 경우
.NET Core 설치에 문제가있는 경우 (Visual Studio 2015 Update 3이 올바르게 설치되지 않았습니다.) - [ DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1 ] 명령을 사용하여 설치를 실행할 수 있습니다. Visual Studio Check Github 문제를 수행하는 설치를 차단합니다.
2 단계 - 프로젝트 만들기
새 ASP.NET 코어 웹 응용 프로그램 만들기 -> 다음 웹 응용 프로그램 선택 다음 화면에서
Class Library (.NET Core) 프로젝트 추가
3 단계 - EF 패키지 설치
클래스 라이브러리의 project.json 파일을 열고 다음을 붙여넣고 파일 저장하기 :
{
"version": "1.0.0-*",
"dependencies": {
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
"NETStandard.Library": "1.6.0"
},
"tools": {
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final"
},
"frameworks": {
"net46": {
},
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0-*"
}
}
}
}
}
이것은 References 아래의 패키지를 복원해야합니다.
---------------- OR
패키지 관리자 콘솔에서 다음 명령을 실행하여 Nuget Package Manager를 사용하여 설치할 수 있습니다.
Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools –Pre
Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design
참고 : 한 번에 하나의 패키지를 설치하십시오 - 설치 후 오류가 발생하면
Microsoft.EntityFrameworkCore.Tools
그런 다음 project.json 프레임 워크 섹션의 내용을 다음과 같이 변경하십시오.
"frameworks": {
"net46": {
},
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0-*"
}
}
}
}
4 단계 - 데이터베이스 모델 생성
이제 데이터베이스를 생성하려면 Package Manager Console 에서 다음 명령을 실행하십시오 (연결 문자열을 데이터베이스로 변경하는 것을 잊지 마십시오)
Scaffold-DbContext "Server=. ; Database=DATABASE; user id= USER ; password = PASSWORD;" Microsoft.EntityFrameworkCore.SqlServer
이렇게하면 시작 프로젝트에 대한 오류가 발생합니다.
이를 위해 클래스 라이브러리에 추가 한 동일한 참조를 .NET Web App에 추가해야합니다.
그래서 당신의 project.json 를 엽니 다 project.json 웹 애플 리케이션을 위해,
dependencies 아래 dependencies 을 추가하십시오.
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
tools 아래에 추가 :
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
변경 후 파일을 저장하십시오.
이것은 내 project.json의 모습입니다.
그런 다음 패키지 관리자 콘솔에서 클래스 라이브러리에 대해 다음 명령을 다시 실행하십시오.
클래스 라이브러리에 대한 참조를 웹 응용 프로그램에 아직 추가하지 않은 경우이 오류가 발생합니다.
이 문제를 해결하려면 클래스 라이브러리의 참조를 웹 응용 프로그램에 추가하십시오.
마침내
Package Manager Console 에서 명령을 다시 실행하십시오.
Scaffold-DbContext "Server=. ; Database=DATABASE; user id= USER ; password = PASSWORD;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
클래스 라이브러리에 모델 폴더 아래에 엔티티가 만들어야합니다.
연결 문자열 전달
이번 경우에는 Client Ten, Client_2, Client_3과 같이 각각의 클라이언트가 고유 한 Database를 갖는 Multi Tenant Application이 있습니다. 그래서 연결 문자열은 동적이어야했습니다.
그래서 생성자에 연결 문자열 속성을 추가하고이를 OnConfiguring 메서드의 컨텍스트에 전달했습니다.
public partial class ClientContext
{
private readonly string _connectionString;
public ClientContext(string connectionString) : base()
{
_connectionString = connectionString;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(_connectionString);
}
}
다음과 같이 사용합니다.
public void TestConnection()
{
var clientId = 1;
var connectionString = string.Format("Server=192.168.0.211; Database=Client_{0}; user id= USER; password = PWD;", clientId);
using (var clientContext = new ClientContext(connectionString))
{
var assets = clientContext.Users.Where(s => s.UserId == 1);
}
}
데이터 모델링, 쿼리 및 저장
모델
EF 코어를 사용하면 데이터 액세스가 모델을 사용하여 수행됩니다. 모델은 엔터티 클래스와 데이터베이스와의 세션을 나타내는 파생 된 컨텍스트로 구성되어 있으므로 데이터를 쿼리하고 저장할 수 있습니다.
기존 데이터베이스에서 모델을 생성하거나, 데이터베이스와 일치하도록 모델을 수작업으로 코딩하거나, EF 마이그레이션을 사용하여 모델에서 데이터베이스를 생성 할 수 있습니다. 또한 모델이 시간이 지남에 따라 변경 될 수 있습니다.
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
namespace Intro
{
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;");
}
}
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public int BlogId { get; set; }
public Blog Blog { get; set; }
}
}
쿼리하기
엔터티 클래스의 인스턴스는 LINQ (Language Integrated Query)를 사용하여 데이터베이스에서 검색됩니다.
using (var db = new BloggingContext())
{
var blogs = db.Blogs
.Where(b => b.Rating > 3)
.OrderBy(b => b.Url)
.ToList();
}
데이터 저장 중
데이터는 엔티티 클래스의 인스턴스를 사용하여 데이터베이스에서 작성, 삭제 및 수정됩니다.
using (var db = new BloggingContext())
{
var blog = new Blog { Url = "http://sample.com" };
db.Blogs.Add(blog);
db.SaveChanges();
}
데이터 삭제
엔터티 클래스의 인스턴스는 LINQ (Language Integrated Query)를 사용하여 데이터베이스에서 검색됩니다.
using (var db = new BloggingContext())
{
var blog = new Blog { Url = "http://sample.com" };
db.Blogs.Attach(blog);
db.Blogs.Remove(blog);
db.SaveChanges();
}
데이터 업데이트 중
데이터는 엔티티 클래스의 인스턴스를 사용하여 데이터베이스에서 업데이트됩니다.
using (var db = new BloggingContext())
{
var blog = new Blog { Url = "http://sample.com" };
var entity = db.Blogs.Find(blog);
entity.Url = "http://sample2.com";
db.SaveChanges();
}








