Dan*_*nte 68 .net c# entity-framework entity-framework-5
我使用EF 5.0 Code First Migrations成功运行了默认的ASP.NET MVC 4模板.但是,当我更新模型属性名称时,EF 5.0将删除相应的表列数据.
是否可以以某种方式重命名表列而不以自动方式删除数据?
Jos*_*her 106
手动编辑迁移到使用的向上和向下的方法RenameColumn来替代方法AddColumn和DropColumn它自动为您生成.
Zan*_*non 42
如前所述,替换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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
Jes*_*ess 12
你可以得到迁移打电话RenameColumn,如果你为你做这个:
[Column("NewName")]
public string OldName { get; set; }
Run Code Online (Sandbox Code Playgroud)
这是生成的迁移:
public override void Up()
{
RenameColumn(table: "Schema.MyTable", name: "OldName", newName: "NewName");
}
public override void Down()
{
RenameColumn(table: "Schema.MyTable", name: "NewName", newName: "OldName");
}
Run Code Online (Sandbox Code Playgroud)
如果希望属性和数据库列名称相同,则可以稍后重命名该属性并删除该Column属性.
您有 2 个步骤来重命名代码第一次迁移中的列
[Column("Content")]
public string Description { set; 得到; }
第二步,
add-migration yournamechange 命令以创建分部类 DbMigration。
在这里添加上下方法
RenameColumn("yourDatabase","name","newName");
public override void Up()
{
RenameColumn("dbo.your_database", "oldColumn",
"newColumn");
}
public override void Down()
{
RenameColumn("dbo.your_database", "newColumn",
"oldColumn");
}
Run Code Online (Sandbox Code Playgroud)
因为当您连接时,您的数据库和模型类将通过数据库中的 name_column 和上面模型中的属性方法中的 name_type 进行通信。
| 归档时间: |
|
| 查看次数: |
32488 次 |
| 最近记录: |