如何在加载应用程序时在数据库上创建所有表?

时间:2018-01-19 05:27:35

标签: c# entity-framework

我正在学习实体框架,我想用它创建一个项目。我在我的项目中使用FluentNhibernate,但现在我想尝试Entity,但我对如何在加载应用程序时创建所有表(DBSet)有疑问。在我的情况下,我有3个表:Cliente, Produto, Venda,我想在加载应用程序时创建,但我不知道如何执行此操作。

我怎么能这样做?

试图

[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))]
public class DatabaseContext : DbContext{
    public DatabaseContext():base("default"){
        Database.SetInitializer<DatabaseContext>(new CreateDatabaseIfNotExists<DatabaseContext>());
        //Database.CreateIfNotExists();                
    }

    public DbSet<Cliente> clientes { get; set; }
    public DbSet<Produto> produtos { get; set; }
    public DbSet<Venda> vendas { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder){        
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

        modelBuilder.Entity<Produto>()
                    .Property(p => p.valor)
                    .HasPrecision(9,2); // or whatever your schema specifies

        Database.SetInitializer<DatabaseContext>(null);
        base.OnModelCreating(modelBuilder);
    }
}

2 个答案:

答案 0 :(得分:1)

假设您已经拥有所有DbContext和实体设置,而您只是询问有关生成/更新数据库的信息,那么您正在寻找实体框架的迁移功能。

打开软件包管理器控制台并在项目中运行以下命令:

&#13;
&#13;
// Enable migrations to your project
Enable-Migrations

// Add migrations to your project
Add-Migration

// Update any changes to the generated database
Update-Database
&#13;
&#13;
&#13;

此处有更多详情: https://martinnormark.com/entity-framework-migrations-cheat-sheet/

答案 1 :(得分:1)

OnModelCreating 方法中删除:

Database.SetInitializer<DatabaseContext>(null);
我建议你阅读: http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx

关于自动迁移: http://www.entityframeworktutorial.net/code-first/automated-migration-in-code-first.aspx