web-dev-qa-db-fra.com

EF Migrations for Database-first approche?

Nous utilisons l'approche Database first avec EntityFramework . Nous avons plusieurs clients et lorsque nous déployons une nouvelle version du produit, nous appliquons maintenant les modifications de schéma de base de données "manuellement" à l'aide d'outils tels que SQL Compare.

Existe-t-il un moyen d'aider EF Migrations à appliquer automatiquement les modifications à la base de données clients?

39
Shaddix

Pour autant que je sache, EF Migrations est un produit destiné à CodeFirst et ne prend pas en charge les opérations Database First. 

CodeFirst suppose que vous ne ferez jamais de modifications manuellement dans la base de données. Toutes les modifications apportées à la base de données passeront par les premières migrations de code.

17
Paul

Je pense qu'il y en a un! Vous devez d'abord continuer votre chemin dans le code.

Pour ce faire, supposons que vous ayez le DbContext suivant que EF Db a créé pour vous:

public class MyDbContext : DbContext
{
    public MyDbContext()
        : base("Name=DefaultConnection")
    {

    }

    // DbSets ...
}

changez cela en suivant pour commencer à utiliser le code en premier et tous ses outils magiques (migration, etc.):

public class MyDbContext : DbContext
{
    public MyDbContext()
        : base("YourDbFileName")
    {

    }

    // DbSets ...
}

Cela a pour effet que EF crée une nouvelle chaîne de connexion à l’aide de SQL Express sur votre ordinateur local dans votre fichier web.config avec le nom YourDbFileName, un peu comme l’ancien Db DefaultConnection créé au préalable.

Tout ce dont vous avez besoin pour continuer est d’éditer le paramètre YourDbFileName ConStr en fonction de votre serveur et d’autres options.

Plus d'infos ici et ici .

4
Amin Saqi

À partir de Entity Framework 4.1, vous pouvez faire Code First Migrations avec une base de données existante .

Donc, vous devez d'abord créer la base de données, créer le modèle, activer les migrations.

La chose la plus importante à retenir est que vous devez exécuter Enable-Migrations avant de modifier le schéma car il doit être synchronisé entre votre base de données et votre code.

2
tatigo

Recherchez simplement votre objet enfant DbContext et recherchez cette méthode:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

Si vous commentez ceci:

throw new UnintentionalCodeFirstException();

alors l'exception ne serait pas levée lors d'une opération de migration. Comme vous pouvez l’imaginer, la migration cherche cette partie pour savoir quelles sont les configurations de chaque entité avec quelle ou quelles tables.

Désolé si je ne suis pas allé avec plus de détails, si vous souhaitez plus, je serai heureux de le modifier et de le rendre meilleur!