【发布时间】:2021-12-31 01:18:06
【问题描述】:
我正在尝试在 ASP.NET 应用程序中添加到数据库的新连接,并且我正在尝试使用代码优先初始化。
现在,这是我的连接字符串:
<connectionStrings>
<add name="DefaultConnection"
connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-Auth-20211221042302.mdf;Initial Catalog=aspnet-Auth-20211221042302;Integrated Security=True"
providerName="System.Data.SqlClient" />
<add name="DriveMeConnection"
connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\DriveMe-App-20211231001122.mdf;Initial Catalog=DriveMe-App-20211231001122;Integrated Security=True;MultipleActiveResultSets=True;App=EntityFramework"
providerName="System.Data.SqlClient" />
</connectionStrings>
第一个 DefaultConnection 是为 ASP.NET 身份验证生成的,并且运行良好。
第二个,DriveMeConnection,是我想从我的代码优先模型创建的数据库。
所以,我像往常一样创建了一个新的DbContext:
public class DatabaseContext : DbContext
{
public DbSet<Azienda> Aziende;
public DbSet<ClientePrivato> ClientiPrivati;
public DbSet<Fornitore> Fornitori;
public DbSet<Auto> ParkAuto;
public DbSet<Guidatore> Guidatori;
public DbSet<Pratica> Pratiche;
public DatabaseContext() : base("name=DriveMeConnection")
{
}
}
(如果我使用base("name=DriveMeConnection") 或base("DriveMeConnection") 没有区别)。
例如,当我尝试阅读某些内容时
using (DatabaseContext db = new DatabaseContext())
{
List<Fornitore> lst = db.Fornitori.ToList();
}
Fornitori 未创建表。在这种情况下,并没有创建整个数据库。
我尝试添加
Database.SetInitializer<DatabaseContext>(new CreateDatabaseIfNotExists<DatabaseContext>());
在 DatabaseContext 构造函数中,但没有任何变化。
我尝试添加
this.Database.CreateIfNotExists();
在DatabaseContext 构造函数中,创建了数据库,但表不存在。
我尝试使用以下命令强制初始化:
using (DatabaseContext db = new DatabaseContext())
{
db.Database.Initialize(force: true);
}
这将创建数据库,但它仍然是空的,没有表。
我错过了什么?
【问题讨论】:
-
如果您希望 EF 创建您的数据库对象,您需要使用 迁移 - 你这样做了吗?这些迁移是生成的 C# 类,它们将生成表、视图等,并允许 EF 为您完成这项工作
-
我正在学习一些教程,并且在那些教程中不讨论迁移...我还没有使用迁移,在我看来数据模型应该足以创建数据库.. . 我会尝试迁移方式...谢谢!
-
我遵循了这个指南,这里讨论的迁移只是为了在创建后修改数据库,但它应该自动创建数据库和表。我想念什么? docs.microsoft.com/it-it/ef/ef6/modeling/code-first/workflows/…
标签: asp.net database ef-code-first