繁体   English   中英

Entity Framework Core 2.0 Add-Migration 不创建任何迁移文件

[英]Entity Framework Core 2.0 Add-Migration doesn't create any migration files

最近从 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.

没有对我来说似乎很明显的错误,也没有创建迁移文件。 我已经完成了删除迁移以开始清理,但仍然没有工作。

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

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

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

您需要将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();
}

从迁移项目中删除所有IDesignTimeDbContextFactory<TContext>实现,并在启动类的ConfigureServices方法中注册DbContext ,与运行应用程序时注册的方式相同。

然后像往常一样运行您的迁移命令,经过数小时的头痛,这对我有用。

我有一个类似的问题,但提供的答案都没有解决它。 在查看我的.csproj-file ,我发现 Visual Studio 在某个时候自动添加了以下几行:

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

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

只需尝试查看迁移 ModelSnapshot.cs 文件,以了解表名称、关系创建(在代码末尾)的差异。

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

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

<RuntimeFrameworkVersion>2.0.3</RuntimeFrameworkVersion>

在 PropertyGroup 标签中。 它对我有用。

请参阅: Russell Seamer 的解决方案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM