我在 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 之外的其他地方设置连接?我觉得很奇怪,因为它没有对数据库做任何事情,所以它没有错误,或者它只是去了我看不到的地方?
首先,需要明确的是,当您执行
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 注入连接字符串