Entity Framework 初始迁移因 SqlException 而失败

Entity Framework initial migration failed with SqlException

我想使用 EF 模型的代码优先方法创建 SQL 服务器 DB/tables。 这是我的简单模型 class

public class MyApplication
{
    [Key]
    public string AppID { get; set; }
    public string AppName { get; set; }
}

我的 DBContext class 显示在这里

public class PolicyDBContext : DbContext
{
    public PolicyDBContext(DbContextOptions options) : base(options)
    {
    }

    protected override void OnConfiguring(DbContextOptionsBuilder OptionaBuilder)
    {
        if (OptionaBuilder.IsConfigured)
        {
            OptionaBuilder.UseSqlServer(builder => builder.EnableRetryOnFailure());
        }
    }
    DbSet<MyApplication> AppRoles { get; set; }
}

这是我在 Startup.cs

中的配置代码
public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<PolicyDBContext>(item => item.UseSqlServer("Server=MyServer;Database=MyDB;user id=testuid;Password=testpwd;");
}

然后我能够运行成功执行“add-migration initialmigration”命令

但是当我运行“更新数据库”命令时,它总是失败并出现以下错误

Error Number:64,State:0,Class:20
A transient exception occurred during execution. The operation will be retried after 15024ms.
Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 0 - The specified network name is no longer available.)

然而,在执行“更新数据库”之后,我注意到新数据库总是在我的 SQL 服务器上创建,但其中没有表。我认为这表明至少我的连接字符串是好的。

从上面的代码可以看出,我做了EnableRetryOnFailure,正如人们在回应类似我的问题时所建议的那样。但它并没有解决我的问题,只是它会在最终放弃之前重试几次 (6)。

我在这里错过了什么?

不确定为什么会这样,但我现在知道如何修复它。看来我需要 运行 update-database 命令两次。第一次会失败,但正如我在 post 中提到的那样,将创建新的空数据库。现在,将空数据库留在那里 - 不要删除它! - 再次 运行 更新数据库命令。这次它会成功并创建表。

代码优先选项中有两种方法。您应该使用 protected override void OnModelCreating(ModelBuilder modelBuilder) { } 您应该在此方法中定义配置。

有关详细信息,请访问此 link