EF Core에서 클래스 라이브러리의 Entity에 Code First Migration 수행
12051 단어 EntityFramework_CoreASP.NET_Core
소개
ASP.NET Core에서 MVC 앱을 만들려고 할 때 여러 프로젝트에서 사용한다고 가정하고,
Entity + DbContext를 다른 프로젝트 (클래스 라이브러리)로 지정했습니다.
하지만 잘 생각하면 StartUp.cs
음 appsetting.json
없는데 어떻게 마이그레이션을 하면 좋을까? 라고 생각해 조사한 바, 자신의 환경에서 잘 되는 방법이 있었으므로, 소개합니다.
필자의 환경
방법(발췌)
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Relational
Microsoft.EntityFrameworkCore.SqlServer
MVC 측
appsetting.json
에 연결 문자열을 추가하여 StartUp.cs
의 DbContext의 DI 부분을 다음과 같이 만듭니다.Startup.cs
services.AddDbContext<MyProjectEntitiesDbContext>(options =>
{
options.UseSqlSer:ve::r(Configuration.GetConnectionString("DefaultConnection"),
assembly => assembly.MigrationsAssembly(typeof(MyProjectEntitiesDbContext).Assembly.FullName));
});
MVC 측 프로젝트 디렉토리에서 명령을 두드립니다.
# --project: クラスライブラリの .csproject パス
# --startup-project: MVC(クラスライブラリを利用する側)の .csproject パス
dotnet ef migrations add InitialMigrations --project ../MyProjectEntities/MyProjectEntities.csproj --startup-project ./MyProjectMVC.csproj
dotnet ef database update
방법 (솔루션 생성에서 일련의 흐름)
1. 솔루션 & 각 프로젝트 만들기
MyProjectMVC
MyProjectEntities
2. 클래스 라이브러리 측
2-1. Person 클래스 만들기
Entities
디렉토리 아래에 보통으로 만듭니다Entities/Person.cs
namespace MyProjectEntities.Entities
{
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
}
}
2-2. EF Core 관련 nuget 패키지 설치
다음 세 가지 패키지를 설치합니다.
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Relational
Microsoft.EntityFrameworkCore.SqlServer
2-3. DbContext 만들기
이번에는
Data
디렉토리 아래에 만들었습니다 (위치는 어디서나 좋습니다)Data/MyProjectEntitiesDbContext.cs
using System.Linq;
using MyProjectEntities.Entities;
using Microsoft.EntityFrameworkCore;
namespace MyProjectEntities.Data
{
namespace MyProjectEntities.Data
{
public class MyProjectEntitiesDbContext : DbContext
{
public MyProjectEntitiesDbContext(DbContextOptions<MyProjectEntitiesDbContext> options)
: base(options)
{
}
public DbSet<Person> Persons { get; set; }
}
}
}
이것으로 클래스 라이브러리 측의 작업은 끝입니다.
3. MVC 측
3-1. appsetting.json에 연결 문자열 추가
정상적으로 추가
appsetting.json
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"DefaultConnection": "hogehogefugafuga"
}
}
3-2. StartUp.cs에서 DbContext를 DI
assembly => assembly.MigrationsAssembly(typeof(クラスライブラリDbコンテキスト名).Assembly.FullName));
가 보통과 다른 부분입니다.StartUp.cs
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<MyProjectEntitiesDbContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
assembly => assembly.MigrationsAssembly(typeof(MyProjectEntitiesDbContext).Assembly.FullName));
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
이것으로 MVC 측의 작업은 끝입니다.
4. 마이그레이션 실시
4-1. MVC 프로젝트의 디렉토리로 이동
콘솔에서
ソリューションのディレクトリ
> MVCプロジェクトのディレクトリ
로 이동합니다.~/P/MyProject ❯❯❯ ls
MyProject.sln MyProjectEntities MyProjectMVC
~/P/MyProject ❯❯❯ cd MyProjectMVC
4-2. 마이그레이션 명령을 두드리기
통상은
dotnet ef migrations add ${マイグレーションファイル名}
로 좋지만,이번에는 다음과 같이
dotnet ef migrations add ${マイグレーションファイル名} --project ${クラスライブラリの.csprojパス} --startup-project ${MVCプロジェクトの.csprojパス}
~/P/M/MyProjectMVC ❯❯❯ dotnet ef migrations add InitialMigrations --project ../MyProjectEntities/MyProjectEntities.csproj --startup-project ./MyProjectMVC.csproj
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 2.2.6-servicing-10079 initialized 'MyProjectEntitiesDbContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: MigrationsAssembly=MyProjectEntities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
Done. To undo this action, use 'ef migrations remove'
4-3. DB 반영
이쪽은 특히 인수 등은 필요없고, 보통으로 두드립니다
~/P/M/MyProjectMVC ❯❯❯ dotnet ef update
Reference
이 문제에 관하여(EF Core에서 클래스 라이브러리의 Entity에 Code First Migration 수행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/intx24/items/245c4403e2145bc3cba7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)