수색…


비고

Entity Framework (EF) 코어는 널리 사용되는 Entity Framework 데이터 액세스 기술의 가볍고 확장 가능한 버전입니다.

EF Core는 .NET 개발자가 .NET 객체를 사용하여 데이터베이스 작업을 수행 할 수있게 해주는 O / RM (object-relational mapper)입니다. 개발자가 일반적으로 작성해야하는 대부분의 데이터 액세스 코드가 필요하지 않습니다.

프로젝트에 패키지 추가하기

EntityFrameworkCore를 프로젝트에 추가하려면 project.json 파일을 업데이트하십시오 ( dependenciestools 섹션에 새 행 추가).

"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();
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow