首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EntityFramework 7 (EF7)迁移。DbContext和StartUp项目在不同的程序集中

EntityFramework 7 (EF7)迁移。DbContext和StartUp项目在不同的程序集中
EN

Stack Overflow用户
提问于 2015-08-07 06:00:54
回答 4查看 7.8K关注 0票数 18

我试图在EF7和entityframework.commands中使用迁移。但是我的DbContext与启动项目在不同的程序集中(asp.net mvc是一个启动项目,Core.Implementation有一个DbContex)。

dnx .ef迁移添加MyMigration -c MyContext

System.InvalidOperationException:没有发现名为“MyContext”的DbContext。

我尝试使用命名空间来指向其他程序集,但它也不起作用。有可能吗?或者我只需要将上下文放在ef7命令所在的程序集中?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-08-07 20:51:59

每一期#639#2256#2293#2294#2357#2553 & #2748,我们在这方面都有一些工作要做。:-)

票数 10
EN

Stack Overflow用户

发布于 2015-09-26 16:16:47

编辑

由于1.0.0-Rc1-决赛(可能更早),这种工作是不必要的。

  • 现在您不需要App.DataAccess/Startup.cs了(如果您使用下面的解决方案,只需删除它)
  • 从主项目中创建/执行迁移(在本例中为App.Web)
  • 但是,您必须指定包含迁移的项目(-p参数):
代码语言:javascript
运行
复制
cd App.Web
dnx ef migrations add NewMigration -p App.DataAccess

如果您有多个数据库上下文,则还必须指定使用哪个数据库上下文(-c参数)。

代码语言:javascript
运行
复制
cd App.Web
dnx ef migrations add NewMigration -p App.DataAccess -c YourDbContext

编辑的

我找到了解决办法

假设您有两个项目:App.WebApp.DataAccess

您可以在App.DataAccess中添加一个非常基本的启动类

代码语言:javascript
运行
复制
>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):

代码语言:javascript
运行
复制
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):

代码语言:javascript
运行
复制
{
  "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

代码语言:javascript
运行
复制
cd App.DataAccess
dnx ef migrations add NewMigration
dnx ef migrations remove
dnx ef database update
dnx ef ...
票数 23
EN

Stack Overflow用户

发布于 2016-08-17 08:19:51

对于ASP.NET Core1.0和EF Core1.0

假设我们希望将上下文移动到Core1RtmEmptyTest.DataLayer项目。

首先,通过修改子项目的project.json文件,为该子项目启用EF工具:

代码语言:javascript
运行
复制
{
     // same as before

    "tools": {
        "Microsoft.EntityFrameworkCore.Tools": {
            "version": "1.0.0-preview2-final",
            "imports": [
                "portable-net45+win8"
            ]
        }
    },

     // same as before
}

然后从这个新项目的根运行命令(而不是从主项目的根)

代码语言:javascript
运行
复制
D:\path\Core1RtmEmptyTest\src\Core1RtmEmptyTest.DataLayer>dotnet ef --startup-project ../Core1RtmEmptyTest/ migrations add InitialDatabase

在这里,我们也应该指定startup-project

最后,更新数据库

代码语言:javascript
运行
复制
D:\path\Core1RtmEmptyTest\src\Core1RtmEmptyTest.DataLayer>dotnet ef --startup-project ../Core1RtmEmptyTest/ database update
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31870709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档