背景:比方说,我使用的是实体框架和映射的一个实体给出如下:更新数据库架构
class Foo
{
public int ID { get; set; }
public string Bar { get; set; }
// other useful properties
}
随着映射:
class FooMap : EntityTypeConfiguration<Foo>
{
// bear me with, I know this is redundant right now
ToTable("Foo");
HasKey(e => e.ID);
Property(e => e.ID).HasColumnName("ID");
Property(e => e.Bar);
}
某处我们需要更改栏名Foo
,因为我的老板告诉我Foo
需要比ID
更奢侈的名字,否则我们的客户将会不高兴。他告诉我们也要将它重命名为“FooID”:
class FooMap : EntityTypeConfiguration<Foo>
{
// bear me with, I know this is redundant right now
ToTable("Foo");
HasKey(e => e.ID);
Property(e => e.ID).HasColumnName("FooID"); // Now you map to FooID
Property(e => e.Bar);
}
就目前而言,如果我运行此操作,则不会有任何改变。 Foo
表格仍然有一个名为ID
的列,它会抛出一个异常,告诉我列FooID
不存在。
问题:我怎样才能获得实体框架认识到,我现在要更新的Foo
表,以便名为ID
列现在被命名为FooID
?
更一般地说,我怎样才能让实体框架自动将我的代码中的更改传播到实际的数据库中(比如在应用程序启动时)而不销毁现有数据?
我不能只是“删除并重新创建”数据库,因为由于超出此问题范围的原因,数据库中存储了一些其他数据,而这些数据并非通过映射到代码中的模型创建的。删除它会导致我们丢失我们不能使用此机制重新创建的表。
谢谢。双命令更新非常有效。 – 2012-02-22 06:02:52