EF实体框架更新-数据库在代码中应用迁移,但数据库不更新

问题描述 投票:0回答:1

我在 ASP.NET Web 应用程序 (.NET Framework) 项目中为代码优先数据库构建了一些初学者类。我希望这是一个代码优先的项目。

服务器位于MY-PC\SQL2008R2,数据库MyDatabase。

当我添加迁移时,我想要的一切都在表/字段中。

我在 WebConfig 中添加了一个连接字符串:

  <connectionStrings>
    <add name="MyConnection" connectionString="Server=My-PC\SQL2008R2;Database=MyDatabase;Integrated Security=true;" providerName="System.Data.SqlClient" />
  </connectionStrings>

在我的迁移文件夹中,我的配置是:

    internal sealed class Configuration : DbMigrationsConfiguration<MyContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }

        protected override void Seed(MyContext context)
        {
        }
    }
}

在我的数据文件夹中,我有一个 MyContext 类:

public class MyContext : DbContext
{
    public DbSet<TableA> TableAs{ get; set; }
    public DbSet<TableB> TableBs{ get; set; }
    public DbSet<TableC> TableCs{ get; set; } 
    public DbSet<TableD> TableDs{ get; set; } 
}

当我运行 update-database -verbose 时,我得到(我认为这是错误所在,但我忘记修复?): 目标数据库是:“MyContext”(数据源:(localdb)\mssqllocaldb,提供程序:System.Data.SqlClient,来源:Convention)。

接下来是应用迁移/我期望的所有 SQL 代码。我可以直接在数据库上运行它,这很好。

在正确连接数据库方面我缺少什么。我是否需要在 WebConfig 之外的其他地方设置连接?我觉得很奇怪,因为它没有对数据库做任何事情,所以它没有错误,或者它只是去了我看不到的地方?

c# sql sql-server entity-framework
1个回答
0
投票

首先,需要明确的是,当您执行

add-migration
update-database
命令时,请确保在包管理器控制台中选择包含 DbContext 的项目作为“默认项目”并设置为启动项目。 其次,执行
add-migration
命令后,Visual Studio 将在“Migrations”文件夹中创建迁移类。它将包含执行“update-database”时数据库将发生的情况的信息。如果迁移文件为空,那么您需要从
add-migration
读取控制台输出以了解出了什么问题。

如果迁移文件看起来不错,并且您已准备好将更改应用到数据库,但是

update-database
失败,您无法确定是连接字符串有问题还是其他问题。再次阅读控制台输出,如果连接字符串有问题,请尝试覆盖
DbContext
类中的连接字符串,例如:

public class MyContext : DbContext
{
    public DbSet<TableA> TableAs{ get; set; }
    public DbSet<TableB> TableBs{ get; set; }
    public DbSet<TableC> TableCs{ get; set; } 
    public DbSet<TableD> TableDs{ get; set; } 

    protected override void OnConfiguring(DbContextOptionsBuilder dbContextOptionsBuilder)
    {
        dbContextOptionsBuilder.UseSqlServer("Server=MY-PC\SQL2008R2;Database=MyDatabase;Trusted_Connection=True;MultipleActiveResultSets=true");
    }
}

如果这有帮助,则意味着您在依赖项注入方面遇到问题,您需要找出为什么未从 web.config 注入连接字符串

© www.soinside.com 2019 - 2024. All rights reserved.