2011-08-31 65 views
2

当使用Connector/NET 6.4.3作为堆栈的c#.net4 mvc3和entity-framework 4.1和MySql 5.0.67时。当域类发生变化时,为了让应用更新MySql中的表,我需要配置什么?如何让“代码优先”更新mysql中的表?

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

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

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

回答

0

我试图做类似的事情,除了我想使用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)。

0

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

基本上,它涉及:

  • 创建YourDbContextInitializerDropCreateDatabaseIfModelChanges<YourDbContext>
  • 覆盖的Seed()方法YourDbContextInitializer继承与最初来填补你的数据库数据。
  • 重写的YourDbContextOnModelCreating(ModelBuilder modelBuilder)方法和设置使用Database.SetInitializer(new YourDbContextInitializer());
数据库初始化