/ / Changer le nom de la table EF __Migration History est-il dangereux? - serveur SQL, entité-cadre

La modification du nom de la table EF __Migration History est-elle dangereuse? - sql-server, entité-framework

Hier j'ai demandé cette question de changer le nom du __Migration History table générée par Entity Framework lors de l'utilisation d'unCode d'abord approche. Le lien fourni a été utile pour indiquer comment faire ce que nous voulons (et par "vouloir", je veux dire ce à quoi nous "sommes forcés de prendre part par nos administrateurs de base de données), mais nous avons également laissé un avertissement quelque peu non spécifique et redoutable:

Mots de précaution

Changer le tableau d'historique de migration est puissantmais vous devez être attention à ne pas en faire trop. Le runtime EF ne vérifie pas actuellement si la table d'historique des migrations personnalisées est compatible avec la runtime. Si ce n'est pas le cas, votre application risque de ne pas fonctionner correctement de manière imprévisible. C’est encore plus important si vous utilisez plusieurs contextes par base de données, auquel cas plusieurs contextes peuvent utiliser le même table d'historique des migrations pour stocker des informations sur les migrations.

Nous avons essayé d’utiliser cet avertissement pour raisonner leL'équipe DBA leur a dit qu'il ne fallait pas "gâcher les choses parce que" voici des dragons ". Leur réponse a été:" On dirait plutôt que le danger est de changer le contenu ou la structure de la table, pas le nom. Allez-y, essayez et voyez ce qui se passe. "

Quelqu'un a-t-il changé le nom du __Migrations History table, et quel fut le résultat? Est-ce dangereux?

Réponses:

2 pour la réponse № 1

Changer le nom de la table d'historique des migrations est possible. Mais vous devez le dire à EF en appelant le HasDefaultSchema méthode avec le nom du schéma dans le OnModelCreating méthode de votre DbContext classe:

public partial class CustomerDatabasesModel : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("CustomerDatabases");

// Fluent API configuration
}
}


Ceci entraînera EF à créer un préfixe "CustomerDatabases" pour tout tables de base de données. Ainsi, dans cet exemple, "CustomerDatabases" remplace le préfixe standard "dbo" de vos tables. Votre table d'historique de migration aura le nom CustomerDatabases.__MigrationHistory.

Donc, en fait, vous changez le nom du propriétaire de la base de données (la première partie), la deuxième partie "__MigrationHistory" reste la même.


Scénario d'utilisation:

Vous faites généralement cela, si vous travaillez avec plus d'un DbContext. Ainsi, vous pouvez avoir plusieurs tables MigrationHistory dans une même base de données, une pour chaque contexte.

Bien sûr, vous devriez tester cela avec soin et effectuer des sauvegardes de la base de données avant.

S'il vous plaît vérifier cette réponse aussi: Entity-Framework: Sur la base de données, plusieurs DbContexts