【问题标题】:Set up database creation/migrations from code for Entity Framework 6 + MySQL从 Entity Framework 6 + MySQL 的代码设置数据库创建/迁移
【发布时间】:2014-07-20 07:53:12
【问题描述】:

我之前在项目中使用 NHibernate 和 Fluent Migrator 创建数据库(如果它不存在)并通过迁移脚本更新架构。我正在查看 Entity Framework (6) 进行比较,但我无法复制该功能。

在我的App.config 中,我设置了连接字符串和数据库提供程序。然后我继续创建了一个数据模型,我希望将其表示为数据库中的一个表。

namespace DataModels
{
    public class StoreClient
    {
        public int Id;
        public string DisplayName;

        public StoreClient()
        {
        }
    }
}

然后我继续创建了一个数据库上下文。

namespace DataModels
{
    public class StoreContext : DbContext
    {
        public DbSet<StoreClient> StoreClients { get; set; }
    }
}

在服务启动时,我创建了一个 StoreContext 的实例并尝试添加和调用 db.SaveChanges();,但这失败了,因为没有与我的 StoreClient 匹配的架构。

我的问题很简单。如何配置我的 StoreContext(或一般的 EF)以自动创建我的数据库架构,以及如何将其设置为在更改该架构时进行迁移?

这看起来很简单,但是我四处搜索并没有找到任何来自 NHibernate 世界的看起来很熟悉的东西。

【问题讨论】:

    标签: c# mysql .net entity-framework database-migration


    【解决方案1】:

    如果您希望自动创建数据库,请尝试在 Application_Start() 方法中添加一些代码。 例如:

    Database.SetInitializer(new MigrateDatabaseToLatestVersion<StoreContext, Configuration>());
    StoreContext context = new StoreContext();
    context.Database.Initialize(true);
    

    在控制台中启用自动迁移时创建配置类的位置。看看这个 msdn demo。 另外,我不确定您的代码优先模型会以这种方式工作。如果不尝试使用属性更改您的字段。

    namespace DataModels
    {
        public class StoreClient
        {
            public int Id { get; set; }
            public string DisplayName { get; set; }
            public StoreClient()
            {
            }
        }
    }
    

    【讨论】:

    • 太棒了,感谢您的提示。您在哪里配置迁移步骤?我认为它不只是隐含地整理出来?
    • 当你启用迁移时,它会为你搭建一个包含一些功能的配置类。我认为所有其他事情都是自动完成的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    相关资源
    最近更新 更多