【问题标题】:ASP.NET code first doesn't create DB or TablesASP.NET 代码首先不创建数据库或表
【发布时间】: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


【解决方案1】:

我终于解决了,没有暂时不需要的迁移,我只在启动时调用这个函数。

public static void FirstConfiguration()
{
    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DatabaseContext>());
    var context = new DatabaseContext();
    context.Database.Initialize(true);
}

并且在 DbContext 中,数据集需要是带有 get 和 set 方法的属性:

public class DatabaseContext : DbContext
{
    public DbSet<Azienda> Aziende { get; set; }
    public DbSet<ClientePrivato> ClientiPrivati { get; set; }
    public DbSet<Fornitore> Fornitori { get; set; }
    public DbSet<Auto> ParkAuto { get; set; }
    public DbSet<Guidatore> Guidatori { get; set; }
    public DbSet<Pratica> Pratiche { get; set; }

    public DatabaseContext() : base("name=DriveMeConnection")
    {
    }
}

【讨论】:

    猜你喜欢
    • 2013-02-16
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多