我试图在EF7和entityframework.commands中使用迁移。但是我的DbContext与启动项目在不同的程序集中(asp.net mvc是一个启动项目,Core.Implementation有一个DbContex)。
dnx .ef迁移添加MyMigration -c MyContext
System.InvalidOperationException:没有发现名为“MyContext”的DbContext。
我尝试使用命名空间来指向其他程序集,但它也不起作用。有可能吗?或者我只需要将上下文放在ef7命令所在的程序集中?
发布于 2015-08-07 12:51:59
发布于 2015-09-26 08:16:47
编辑
由于1.0.0-Rc1-决赛(可能更早),这种工作是不必要的。
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.Web
和App.DataAccess
您可以在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)
{
}
}
}
而不是修改project.json in App.DataAccess (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 ...
发布于 2016-08-17 00:19:51
对于ASP.NET Core1.0和EF Core1.0
假设我们希望将上下文移动到Core1RtmEmptyTest.DataLayer
项目。
首先,通过修改子项目的project.json
文件,为该子项目启用EF工具:
{
// same as before
"tools": {
"Microsoft.EntityFrameworkCore.Tools": {
"version": "1.0.0-preview2-final",
"imports": [
"portable-net45+win8"
]
}
},
// same as before
}
然后从这个新项目的根运行命令(而不是从主项目的根)
D:\path\Core1RtmEmptyTest\src\Core1RtmEmptyTest.DataLayer>dotnet ef --startup-project ../Core1RtmEmptyTest/ migrations add InitialDatabase
在这里,我们也应该指定startup-project
。
最后,更新数据库
D:\path\Core1RtmEmptyTest\src\Core1RtmEmptyTest.DataLayer>dotnet ef --startup-project ../Core1RtmEmptyTest/ database update
https://stackoverflow.com/questions/31870709
复制