实体框架Core 2.0添加迁移不生成任何内容

时间:2018-01-04 19:42:04

标签: c# entity-framework visual-studio-2017 .net-core

我是EF的新手,我正在尝试使用VS 2017,.NET Core 2.0和EF 2.0创建一个简单的测试解决方案,但我无法通过 add-migration 来创建迁移文件夹和最初的迁移。

我创建了一个名为 Driver 的解决方案,其中包含两个.Net Core类库项目:

Driver.Data
Driver.Domain

以下软件包安装在 Driver.Data

Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools

Driver.Data 有一个名为 Driver.Context 的单个cs文件:

using Driver.Domain;
using Microsoft.EntityFrameworkCore;

namespace Driver.Data
{
    public class DriverContext : DbContext
    {
        public DbSet<Company> Companies { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(
                "Server=(localdb)\\mssqllocaldb; Database=Driver; Trusted_Connection=True;"
                );
        }
    }

}

Driver.Domain 有一个名为 Company.cs 的单个cs文件:

namespace Driver.Domain
{
    public class Company
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string City { get; set; }
        public string State { get; set; }
    }
}

我已将启动项目设置为 Driver.Data ,并在PM控制台中将默认项目设置为 Driver.Data

以下是 add-migration init -verbose 的输出:

Using project 'Driver.Data'.
Using startup project 'Driver.Data'.
Build started...
Build succeeded.
C:\Program Files\dotnet\dotnet.exe exec --depsfile "C:\Users\alex.florin\Documents\Visual Studio 2017\Projects\Driver\trunk\Driver.Data\bin\Debug\netcoreapp2.0\Driver.Data.deps.json" --additionalprobingpath C:\Users\alex.florin\.nuget\packages --additionalprobingpath "C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback" --additionalprobingpath "C:\Program Files\dotnet\sdk\NuGetFallbackFolder" --fx-version 2.0 "C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.entityframeworkcore.tools\2.0.1\tools\netcoreapp2.0\ef.dll" migrations add init --json --verbose --no-color --prefix-output --assembly "C:\Users\alex.florin\Documents\Visual Studio 2017\Projects\Driver\trunk\Driver.Data\bin\Debug\netcoreapp2.0\Driver.Data.dll" --startup-assembly "C:\Users\alex.florin\Documents\Visual Studio 2017\Projects\Driver\trunk\Driver.Data\bin\Debug\netcoreapp2.0\Driver.Data.dll" --project-dir "C:\Users\alex.florin\Documents\Visual Studio 2017\Projects\Driver\trunk\Driver.Data\\" --root-namespace Driver.Data

没有错误,但没有生成任何内容。

2 个答案:

答案 0 :(得分:15)

当我在她的复数课程讨论中提出问题时,@ JulieLerman提供了答案。尝试使用.NET Core类库时显然存在问题。成功的解决方法是将以下内容放在DBContext项目的csproj文件中:

<PropertyGroup>
  <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConf‌igurationFiles> 
</PropertyGroup>

她写了一篇关于它的博客: http://thedatafarm.com/data-access/the-secret-to-running-ef-core-2-0-migrations-from-a-net-core-or-net-standard-class-library/

此外,请务必使用DBContext将项目设置为启动项目

答案 1 :(得分:0)

当我试图让它工作时我遇到了问题,因为我担心EF Core 2.0还没有完全准备好黄金时间,因为主要的dotnet核心命令不能开箱即用。除了你所做的,我必须运行一些更多的东西,让它在项目文件中运行。我遵循这两个主题: https://github.com/aspnet/Scaffolding/issues/645 和Joe Healy在这里回答: No executable found matching command "dotnet-ef"

本质上它什么都不做或者给出一个非常基本的错误。它最终导致Microsoft.EntityFrameworkCore.Tools.DotNet的连接无法正常工作,需要在&#39; ItemGroup&#39;中设置。在我的.NET Core 2项目中如此:

 <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.1" />
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.1" />
  </ItemGroup>

我还认为你需要使用稍微不同的代码来使迁移工作利用dotnet来调用“dotnet core&#39;”的命令。其次是&#39; ef&#39;。所以我只是在我的测试解决方案上做到了这一点:

dotnet ef migrations add test

它有效。在执行迁移或数据库更新命令时,您必须与项目处于同一文件夹级别。如果您仍然遇到问题,请随时查看我在GitHub上创建的项目:

https://github.com/djangojazz/EFCoreTest/tree/master/EFCoreCodeFirstScaffolding