实体框架Core 2.0 Add-Migration不会创建任何迁移文件

时间:2017-08-24 00:39:12

标签: c# entity-framework database-migration ef-migrations entity-framework-core

最近从EF Core 1.0迁移到EF Core 2.0,运行正常。今天我添加了一个新表(代码优先)并将其添加到我的DbContext中:

public virtual DbSet<Foo> Foos { get; set; }

当我运行迁移时,将DbContext放在一个单独的项目中(请记住这一切都在以前工作),迁移结束,但没有创建迁移文件。这一切都在Core 2.0之前使用:

http://paultechguy.blogspot.com/2017/04/entity-framework-core-migrating-and.html

PM> Add-Migration GradePremade -project Mfc.MfcRepositoryModel -verbose -context MfcDbContext -StartupProject web.xyz
Using project 'class.xyz\Mfc.MfcRepositoryModel'.
Using startup project 'web.xyz'.
Build started...
Build succeeded.
C:\Program Files\dotnet\dotnet.exe exec --depsfile C:\development\xyz\web.xyz\bin\Debug\netcoreapp2.0\web.xyz.deps.json --additionalprobingpath C:\Users\pcarver\.nuget\packages --additionalprobingpath "C:\Program Files\dotnet\sdk\NuGetFallbackFolder" --runtimeconfig C:\development\xyz\web.xyz\bin\Debug\netcoreapp2.0\web.xyz.runtimeconfig.json "C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.entityframeworkcore.tools\2.0.0\tools\netcoreapp2.0\ef.dll" migrations add GradePremade --json --context MfcDbContext --verbose --no-color --prefix-output --assembly C:\development\xyz\web.xyz\bin\Debug\netcoreapp2.0\Mfc.MfcRepositoryModel.dll --startup-assembly C:\development\xyz\web.xyz\bin\Debug\netcoreapp2.0\web.xyz.dll --project-dir C:\development\xyz\class.xyz\Mfc.MfcRepositoryModel --root-namespace Mfc.MfcRepositoryModel
Using assembly 'Mfc.MfcRepositoryModel'.
Using startup assembly 'web.xyz'.
Using application base 'C:\development\xyz\web.xyz\bin\Debug\netcoreapp2.0'.
Using working directory 'C:\development\xyz\web.xyz'.
Using root namespace 'Mfc.MfcRepositoryModel'.
Using project directory 'C:\development\xyz\class.xyz\Mfc.MfcRepositoryModel'.
Finding DbContext classes...
Finding IDesignTimeDbContextFactory implementations...
Finding application service provider...
Finding BuildWebHost method...
No BuildWebHost method was found on type 'xyz.Program'.
No application service provider was found.
Finding DbContext classes in the project...
Found DbContext 'ApplicationDbContext'.
Found DbContext 'MfcDbContext'.
Using DbContext factory 'MfcContextFactory'.
Using context 'MfcDbContext'.
Finding design-time services for provider 'Microsoft.EntityFrameworkCore.SqlServer'...
Using design-time services from provider 'Microsoft.EntityFrameworkCore.SqlServer'.
Finding IDesignTimeServices implementations in assembly 'web.xyz'...
No design-time services were found.

没有任何错误对我来说很明显,也没有创建迁移文件。我已经完成了Remove-Migration以开始干净,但仍然没有工作。

8 个答案:

答案 0 :(得分:4)

.NET Core类库中存在问题。成功的解决方法是将以下内容放在Model项目的csproj文件中:

<PropertyGroup>
  <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> 
</PropertyGroup>

答案 1 :(得分:2)

我必须将项目标记为启动项目。

答案 2 :(得分:1)

我有一个类似的问题,但是提供的答案均未解决。回顾我的.csproj-file之后,我发现Visual Studio有时会自动添加以下行:

<ItemGroup>
  <Compile Remove="Migrations\**" />
  <Content Remove="Migrations\**" />
  <EmbeddedResource Remove="Migrations\**" />
  <None Remove="Migrations\**" />
</ItemGroup>

删除此ItemGroup后,更新我的数据库即可再次正常工作。

答案 3 :(得分:0)

您需要将Program课程更新为

    public class Program
{
    public static void Main(string[] args)
    {
        var host = BuildWebHost(args);

        host.Run();
    }

    // Tools will use this to get application services
    public static IWebHost BuildWebHost(string[] args) =>
        new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();
}

答案 4 :(得分:0)

从迁移项目中删除所有IDesignTimeDbContextFactory<TContext>实施,并在启动类中的DbContext方法中注册ConfigureServices,就像在运行应用程序时注册一样。

然后像往常一样运行您的迁移命令,这对我来说非常麻烦。

答案 5 :(得分:0)

DbContext类应具有无参数构造函数和带有选项的构造函数。您必须覆盖OnConfiguring。在其内部指定了提供者例如:

options.UseSqlServer(_connectionString);

代码示例:

public class AppDbContext : DbContext
{
    private const string _connectionString = "Data Source=....;App=EntityFramework";


    public AppDbContext(DbContextOptions<AppDbContext> options)
        : base(options)
    { }

    public AppDbContext() : base()
    {
        
    }


    public virtual DbSet<MyEntitie> Users { get; set; }


    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        if (options.IsConfigured)
        {
            return;
        }

        options.UseSqlServer(_connectionString);
    }
}

最后使用命令行并运行以下命令(键入项目的文件名,即DbContext文件),也可以使用nuget软件包管理器控制台:

dotnet ef migrations -v -p App.csproj add Init

答案 6 :(得分:-1)

仅尝试查看迁移ModelSnapshot.cs文件,以了解表名的不同,关系的创建(在代码末尾)。

答案 7 :(得分:-2)

我尝试更新.csproj文件中的运行时版本以包含:

<RuntimeFrameworkVersion>2.0.3</RuntimeFrameworkVersion>
PropertyGroup标签中的

。它对我有用。

请参阅:Russell Seamer's Solution