EntityFramework 7(EF7)の移行DbContextとStartUp Projectが異なるアセンブリにあります

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

質問

私はentityframework.commandsでEF7での移行を使用しようとしています。しかし、私のDbContextは、スタートアッププロジェクト(asp.net mvcはスタートアッププロジェクトであり、Core.ImplementationにはDbContexがあります)とは異なるアセンブリにあります。

dnx。 ef migrationの追加MyMigration -c MyContext

System.InvalidOperationException: 'MyContext'という名前のDbContextが見つかりませんでした。

私は他のアセンブリを指すために名前空間を使用しようとしましたが、どちらも動作しませんでした。まったく可能ですか?あるいは、ef7コマンドがどこにあるのか、私のコンテキストをアセンブリに入れなければなりませんか?

受け入れられた回答

#639#2256#2293#2294#2357#2553#2748の問題ごとに、その領域で行う作業が少しあります。 :-)


人気のある回答

EDIT

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 2つのプロジェクトがあるとします

非常に基本的なStartupクラスをApp.DataAccess追加することができます:

>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 ...


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ