我得到了默认的ASP.NET MVC 4模板与EF 5.0代码首先迁移成功运行。 然而,当我更新模型属性的名称,相应的表列数据是由EF 5.0下降。
是它在某种程度上可以不以自动的方式丢弃数据表列重命名?
我得到了默认的ASP.NET MVC 4模板与EF 5.0代码首先迁移成功运行。 然而,当我更新模型属性的名称,相应的表列数据是由EF 5.0下降。
是它在某种程度上可以不以自动的方式丢弃数据表列重命名?
手动编辑迁移的向上和向下的方法来使用RenameColumn
方法来代替AddColumn
和DropColumn
,它会自动为您生成。
前面已经说了 ,更换AddColumn
和DropColumn
自动与生成RenameColumn
。
例:
namespace MyProject.Model.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class RenameMyColumn : DbMigration
{
public override void Up()
{
// Remove the following auto-generated lines
AddColumn("dbo.MyTable", "NewColumn", c => c.String(nullable: false, maxLength: 50));
DropColumn("dbo.MyTable", "OldColumn");
// Add this line
RenameColumn("dbo.MyTable", "OldColumn", "NewColumn");
}
public override void Down()
{
// Remove the following auto-generated lines
AddColumn("dbo.MyTable", "OldColumn", c => c.String(nullable: false, maxLength: 50));
DropColumn("dbo.MyTable", "NewColumn");
// Add this line
RenameColumn("dbo.MyTable", "NewColumn", "OldColumn");
}
}
}
你可以迁移调用RenameColumn
你,如果你这样做:
[Column("NewName")]
public string OldName { get; set; }
下面是所生成的迁移:
public override void Up()
{
RenameColumn(table: "Schema.MyTable", name: "OldName", newName: "NewName");
}
public override void Down()
{
RenameColumn(table: "Schema.MyTable", name: "NewName", newName: "OldName");
}
如果你希望你的财产和数据库列是相同的名称,您可以稍后重命名属性和删除Column
的属性。
现在,这个答案是根据我EF4.3的知识,所以我希望迁移工作大致EF5一样:)你已经创建了一个迁移后,你应该能够在向上和向下的方法添加代码,之间老物业的下降和新属性的创建。 此代码应在正确的方向上移动特性数据。 我在这里可以输入原始SQL来执行数据移动的SQL()方法来解决它。
在迁移的up方法:
SQL("update [TheTable] set [NewColumn] = [OldColumn]");
并在向下()方法:
SQL("update [TheTable] set [OldColumn] = [NewColumn]");
这种方法的缺点是,你可能对夫妇的代码与你在做什么工作的(因为你写的原始DB-特定SQL)数据库。 可能有可用于数据转移的其他方法为好。
更多信息请访问: MSDN
添加到乔希加拉格尔的答案:
在一些地方,sp_RENAME语法描述是这样的:
sp_RENAME 'TableName.[OldColumnName]' , '[NewColumnName]', 'COLUMN'
但是,实际上将包括在新的列名的括号内。
DbMigration的RenameColumn()方法可能会做同样的,所以避免指定新的列名时使用括号。
此外,在向上的自动生成的命令()&向下()包括DropPrimaryKey()和AddPrimaryKey()如果要重命名的列是主键的一部分。 使用RenameColumn时,这些不需要()。 如果所需的基本sp_RENAME自动更新的主键。
你有2个步骤来重命名代码中第一次迁移列
[柱( “内容”)]
公共字符串描述{设置; 得到; }
第二步骤中,
为了创建部分类DbMigration添加迁移yournamechange命令。
加入到了,在这里上下方法
RenameColumn( “yourDatabase”, “姓名”, “了newName”);
public override void Up()
{
RenameColumn("dbo.your_database", "oldColumn",
"newColumn");
}
public override void Down()
{
RenameColumn("dbo.your_database", "newColumn",
"oldColumn");
}
当你连接,因为,你的数据库和模型类将通过name_column在数据库和name_type在财产法在模型上面沟通。
像+乔什Gallagher表示,最多可以使用()做的事情,如:
public override void Up()
{
RenameColumn("dbo.atable","odlanem","newname");
AddColumn("dbo.anothertable", "columname", c => c.String(maxLength: 250));
}
我找到了这个在刚开到迁移有很好的帮助;)