Mise à jour de schéma de base de données sur le changement du modèle de données sans perte de données

Fond: disons que je suis en utilisant entity framework et de l'une des entités mappées est donnée sous la forme:

class Foo
{
    public int ID { get; set; }
    public string Bar { get; set; }
    //other useful properties
}

Avec la cartographie:

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);
}

Quelque part sur la route nous avons besoin de changer le nom de la colonne de Foo parce que mon patron me dit le Foo besoin d'avoir un plus extravagant que le nom ID ou l'autre de nos clients ne seront pas contents. Il nous dit de le renommer trop "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);
}

Comme il est, si je lance ce rien n'aura changé. Le Foo table y aura toujours une colonne nommée ID et il va lever une exception en me disant que la colonne FooID n'existe pas.

La Question: Comment puis-je obtenir de l'entité cadre de reconnaître que je souhaite maintenant mettre à jour le Foo table, de sorte que la colonne nommée ID est maintenant nommé FooID?

Plus généralement, comment puis-je obtenir de l'entity framework pour propager automatiquement les modifications de mon code dans la base de données (par exemple au démarrage de l'application) SANS détruire les données existantes?

Je ne peux pas juste "supprimer et de recréer" la base de données parce que, pour des raisons au-delà de la portée de cette question, la base de données stocke les données d'autres dans ce qui n'est pas créé par l'intermédiaire de modèles mappé dans mon code. En le déposant serait de nous faire perdre de tables que nous ne pouvons pas recréer à l'aide de ce mécanisme.

OriginalL'auteur Mike Bailey | 2012-02-22