【问题标题】:How to get "code first" to update tables in mysql?如何让“代码优先”更新mysql中的表?
【发布时间】:2011-11-07 22:33:03
【问题描述】:

当 c# .net4 mvc3 和 entity-framework 4.1 和 MySql 5.0.67 使用 Connector/NET 6.4.3 作为堆栈时。当域类发生变化时,我需要配置什么才能让应用更新 MySql 中的表?

另外,有没有办法从域类生成 sql/DDL?

我想使用“代码优先”方法,但当数据库已经存在时,我似乎无法让它更新/创建表。

将连接提供程序和字符串更改为 SQLServer CE 时,它会同时创建数据库和表。

【问题讨论】:

    标签: c# .net mysql entity-framework-4.1 ef-code-first


    【解决方案1】:

    我正在尝试做类似的事情,但我正在尝试使用 SQLite。我刚刚发现这个页面:http://weblogs.asp.net/manavi/archive/2011/05/17/associations-in-ef-4-1-code-first-part-6-many-valued-associations.aspx 有一个标题为“获取代码优先生成的 SQL DDL”的部分,这似乎有助于生成 SQL 来创建数据库。

    您是否查看过 Database.SetInitializer 方法 (http://msdn.microsoft.com/en-us/library/gg679461%28v=vs.103%29.aspx),它使用的一种类型是 DropCreateDatabaseIfModelChanges (http://msdn.microsoft.com/en-us/library/gg679604%28v=vs.103%29.aspx)。这也适用于 SQLServer CE,但我认为我发现当前版本的 System.Data.SQLite 还不支持此功能,因此我将不得不以另一种方式创建数据库。

    这里有几个其他问题可能会有所帮助,但我不能确定它们是否可以首先应用于代码。

    Entity Framework 4.1 - Tracking and manually deploying DDL changes using T-SQL Entity Framework 4 - Update database schema from model. Without wiping the table data

    祝你好运。如果您有兴趣查看,我将在我的网站 kihonkai.com 上发布我在一般编码方面的进展(包括我使用的 EF 4.1)。

    【讨论】:

      【解决方案2】:

      我在这里回答了一个类似的问题: Entity Framework 4.1 Code First not creating tables

      基本上,它涉及:

      • 创建一个继承自 DropCreateDatabaseIfModelChanges<YourDbContext>YourDbContextInitializer
      • 覆盖YourDbContextInitializer 中的Seed() 方法以使用初始数据填充您的数据库。
      • 覆盖YourDbContextOnModelCreating(ModelBuilder modelBuilder) 方法并使用Database.SetInitializer(new YourDbContextInitializer()); 设置数据库初始化程序

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多