EntityFramework 7(EF7)遷移。 DbContext和StartUp Project位於不同的程序集中

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

我正在嘗試使用entityframework.commands在EF7中使用遷移。但是我的DbContext與Start-up項目處於不同的程序集中(asp.net mvc是一個啟動項目,而Core.Implementation有一個DbContex)。

dnx。 ef migration添加MyMigration -c MyContext

System.InvalidOperationException:未找到名為“MyContext”的DbContext。

我試圖使用命名空間指向其他程序集,但它也沒有用。有可能嗎?或者我只需要將我的上下文放在ef7命令所在的彙編中?

一般承認的答案

根據問題#639#2256#2293#2294#2357#2553#2748 ,我們在該領域有一些工作要做。 :-)


熱門答案

編輯

從1.0.0-rc1-final(可能更早)開始,這個工作區是不必要的

  • 現在你不需要App.DataAccess/Startup.cs (如果你使用下面的解決方法,只需刪除它)
  • 您從主項目創建/執行遷移(在本例中為App.Web
  • 但是,您必須指定包含遷移的項目( -p paramater):

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

編輯結束

我發現了一個解決方法

假設您有2個項目: App.WebApp.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 )中修改App.DataAccess/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合法嗎? 是的,了解原因