实体框架Core 2上下文和模型在主项目的单独项目中

时间:2018-01-02 23:50:51

标签: entity-framework entity-framework-core

如何将迁移添加到单独的数据项目中?

我有两个项目,一个包含上下文和模型的数据项目以及将使用它的网站项目。我已将两者完美地联系在一起,问题是当我尝试使用add-migration initialmigration向数据项目添加迁移时,错误

无法创建“myContext”类型的对象。将“IDesignTimeDbContextFactory”的实现添加到项目中,或者查看https://go.microsoft.com/fwlink/?linkid=851728以获取在设计时支持的其他模式。

该链接包含有关如何添加IDesignTimeDbContextFactory的详细信息,但由于UseSqlServer不作为命令存在而无效。该页面链接到https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/#update-main-method-in-programcs处的更新版本,该版本表示将代码放入program.cs即使我按照说明将其添加到我的数据项目(以及相关的引用),以便我包含< / p>

    public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }

这就是它所说的,但我得到了相同的错误消息。因此,无论我是否包含代码部分,我都会得到相同的错误消息,尽管Microsoft.com页面声明上述代码会停止我出现的错误消息。

我已经尝试将上下文和模型放入我的主项目中,并且可以很好地生成迁移,因此这些代码的代码至少是正常的。

如何将迁移添加到单独的数据项目中?

2 个答案:

答案 0 :(得分:0)

Add-Migration有一个-Project参数。

Add-Migration -Project MyProject -Context MyDbContext -Name InitialMigration

编辑:要查看cmdlet的所有选项(因为Package Manager Console只是PowerShell),请执行

Get-Help Add-Migration -Full

答案 1 :(得分:-1)

类库中的DbContext应如下所示:

public class ExampleDbContext : DbContext
{
    public UserProfileDbContext(DbContextOptions<ExampleDbContext > options)
        : base(options) { }

    public DbSet<Example> Examples{ get; set; }

}

在你的Startup中你应该添加:

public void ConfigureServices(IServiceCollection services)
{
 services.AddDbContext<ExampleDbContext >(options =>
  options.UseSqlServer(configuration.GetConnectionString("DefaultConnection")));
}

这是在使用MS Sql server并在appsettings.json

中有连接字符串时

然后例如使用包管理器控制台为您的类库项目与EF,它应该工作。 您应该在类库项目中使用以下nuget包:

Microsoft.EntityFrameworkCore,
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools