Asp.net-Core-Mvc
EntityFramework 7 (EF7) 遷移。DbContext 和 StartUp Project 位於不同的程序集中
我正在嘗試通過 entityframework.commands 在 EF7 中使用遷移。但是我的 DbContext 與 Start-up 項目在不同的程序集中(asp.net mvc 是一個啟動項目,Core.Implementation 有一個 DbContex)。
dnx ef 遷移添加 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包含遷移的項目(參數):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.Web和App.DataAccess您可以將一個非常基本的 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簡單的啟動類 (
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 ...