EntityFramework 7 (EF7) 마이그레이션. DbContext 및 시작 프로젝트가 다른 어셈블리에 있습니다.

asp.net-core-mvc entity-framework-core

문제

entityframework.commands를 사용하여 EF7에서 마이그레이션을 사용하려고합니다. 하지만 내 DbContext는 시작 프로젝트 (asp.net mvc는 시작 프로젝트이고 Core.Implementation에는 DbContex가 있음)와는 다른 어셈블리에 있습니다.

dnx. 마이 그 레이션 추가 MyMigration -c MyContext

System.InvalidOperationException : 'MyContext'라는 DbContext를 찾을 수 없습니다.

네임 스페이스를 사용하여 다른 어셈블리를 가리 키려고했으나 작동하지 않았습니다. 전혀 가능합니까? 또는 ef7 명령이있는 어셈블리에 컨텍스트를 넣어야합니다.

수락 된 답변

# 639 , # 2256 , # 2293 , # 2294 , # 2357 , # 2553# 2748마다 우리는 그 영역에서해야 할 일이 조금 있습니다. :-)


인기 답변

편집하다

1.0.0-rc1-final (어쩌면 이전 버전)부터이 workaroud는 불필요합니다.

  • 이제 App.DataAccess/Startup.cs 가 필요하지 않습니다 (아래 해결 방법을 사용한 경우 삭제하십시오).
  • 주 프로젝트 (이 경우 App.Web )에서 마이그레이션 / 마이그레이션을 생성합니다.
  • 그러나 마이그레이션이 포함 된 프로젝트 ( -p 매개 변수)를 지정해야합니다.

cd App.Web
dnx ef migrations add NewMigration -p App.DataAccess

여러 개의 데이터베이스 컨텍스트가있는 경우 사용할 컨텍스트도 지정해야합니다 ( -c 매개 변수)

cd App.Web
dnx ef migrations add NewMigration -p App.DataAccess -c YourDbContext

편집 종료

그 해결 방법을 찾았습니다.

App.WebApp.DataAccess App.Web 두 개의 프로젝트가 있다고 가정 해 App.DataAccess

App.DataAccess 매우 기본적인 Startup 클래스를 추가 할 수 있습니다.

>App.Web
-->Startup.cs // your main startup
>App.DataAccess
-->path/to/ApplicationDbContext.cs
-->different/path/to/YourModels.cs
-->Startup.cs // add a simple startup class
-->project.json

간단한 Startup 클래스 ( App.DataAccess\Startup.cs ) :

using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.Data.Entity;
using Microsoft.Dnx.Runtime;
using Microsoft.Framework.Configuration;
using Microsoft.Framework.DependencyInjection;
using Microsoft.Framework.Logging;

namespace App.DataAccess
{
    public class Startup
    {
        public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
        {
            var builder = new ConfigurationBuilder(appEnv.ApplicationBasePath)
                .AddJsonFile("../App.Web/config.json"); // path to your original configuration in Web project

            Configuration = builder.Build();
        }

        public IConfiguration Configuration { get; set; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddEntityFramework()
                .AddSqlServer()
                .AddDbContext<ApplicationDbContext>(options =>
                    options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
        }
    }
}

App.DataAccess ( App.DataAccess/project.json )에서 project.json을 수정하는 것보다

{
  "version": "1.0.0-*",
  "description": "App.DataAccess Class Library",
  "authors": [ "Author" ],
  "tags": [ "" ],
  "projectUrl": "",
  "licenseUrl": "",
  "frameworks": {
    "dnx451": { }
  },

  "dependencies": {
    "EntityFramework.Commands": "7.0.0-beta7",
    "Microsoft.Framework.Configuration.Json": "1.0.0-beta7",
  },

  "commands": {
    "ef": "EntityFramework.Commands" // this line is important, it will give you access to 'dnx ef' in command line
  }
}

App.DataAccess 로 이동하여 dnx ef :

cd App.DataAccess
dnx ef migrations add NewMigration
dnx ef migrations remove
dnx ef database update
dnx ef ...



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.