【问题标题】:EF Core Add Migration DebuggingEF Core 添加迁移调试
【发布时间】:2017-05-30 12:47:27
【问题描述】:

如何使用断点进入OnModelCreating 并查看我的逻辑是否错误,或者ModelBuilder 是否正在做一些我没有预料到的事情?我看过很多关于如何调试实际迁移的帖子,但没有看到如何查看模型代码是如何生成的。

我正在尝试在我的一些实体上实现一些自定义属性,但它被忽略了;我想看看我的配置在生成模型代码时做了什么。

【问题讨论】:

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


【解决方案1】:

您应该可以在代码中调用Debugger.Launch()。即时调试器应在遇到该行时提示您附加调试器。

【讨论】:

  • 谢谢!那是你帮助我的两倍。 :)
  • 这是我的工作。 ;) 我试图确保人们可以使用我创造的东西。提出的每个问题都会成为未来增强功能的输入。
  • @bricelam 是否也可以在 EF Core 2.0 中使用?调试器不会在那里正确连接。
  • 我正在尝试附加一个调试器,但它不会进入我的代码。有什么先决条件吗?
  • @JohnOsborne,我在调用 Debugger.Launch(); 时遇到了同样的问题;在运行 Add-Migration 时在我的 DbContext 的 OnConfiguring 方法中
【解决方案2】:

另一种方法是创建您自己的控制台应用程序或单元测试并对其进行调试。通过 bricelam from the ef github issue 使用这个 sn-p

using (var db = new MyDbContext())
{
    var reporter = new OperationReporter(
        new OperationReportHandler(
            m => Console.WriteLine("  error: " + m),
            m => Console.WriteLine("   warn: " + m),
            m => Console.WriteLine("   info: " + m),
            m => Console.WriteLine("verbose: " + m)));

    var designTimeServices = new ServiceCollection()
        .AddSingleton(db.GetService<IHistoryRepository>())
        .AddSingleton(db.GetService<IMigrationsIdGenerator>())
        .AddSingleton(db.GetService<IMigrationsModelDiffer>())
        .AddSingleton(db.GetService<IMigrationsAssembly>())
        .AddSingleton(db.Model)
        .AddSingleton(db.GetService<ICurrentDbContext>())
        .AddSingleton(db.GetService<IDatabaseProvider>())
        .AddSingleton<MigrationsCodeGeneratorDependencies>()
        .AddSingleton<ICSharpHelper, CSharpHelper>()
        .AddSingleton<CSharpMigrationOperationGeneratorDependencies>()
        .AddSingleton<ICSharpMigrationOperationGenerator, CSharpMigrationOperationGenerator>()
        .AddSingleton<CSharpSnapshotGeneratorDependencies>()
        .AddSingleton<ICSharpSnapshotGenerator, CSharpSnapshotGenerator>()
        .AddSingleton<CSharpMigrationsGeneratorDependencies>()
        .AddSingleton<IMigrationsCodeGenerator, CSharpMigrationsGenerator>()
        .AddSingleton<IOperationReporter>(reporter)
        .AddSingleton<MigrationsScaffolderDependencies>()
        .AddSingleton<MigrationsScaffolder>()
        .BuildServiceProvider();

    var scaffolder = designTimeServices.GetRequiredService<MigrationsScaffolder>();

    var migration = scaffolder.ScaffoldMigration(
        "MyMigration",
        "MyApp.Data");

    File.WriteAllText(
        migration.MigrationId + migration.FileExtension,
        migration.MigrationCode);
    File.WriteAllText(
        migration.MigrationId + ".Designer" + migration.FileExtension,
        migration.MetadataCode);
    File.WriteAllText(migration.SnapshotName + migration.FileExtension,
        migration.SnapshotCode);
}

【讨论】:

    猜你喜欢
    • 2018-02-10
    • 1970-01-01
    • 2017-11-30
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2021-12-25
    • 2021-11-23
    相关资源
    最近更新 更多