EFCore-3

Avec des questions à penser! Bonjour à tous

EF base des tâches communes

base de données Modélisation, soutient actuellement seule approche code EFCore Première.

1: Définir la base de données et le modèle

La base de données finale est modélisé en fonction de la DbContext dérivée d'une classe qui contient un ou plusieurs types de DbSet <T> propriété de collection, type T est enregistrée dans la table,

publique  classe votre_base_de_données: DbContext 
{ 
   publics DbSet <client> Les clients { obtenir ; définir ;} 
}

Base de données relationnelle sous-jacente physique nécessite une table nommée clients.

publique  classe EntityBase 
{ 
   publique EntityBase () 
   { 
       Activé = true ; 
       Modification = DateTime.UtcNow; 
   } 
   Publique  bool Enabled { obtenir ; définir ;}
    publique DateTime? Modfied { get ; ensemble ;} 
} 
publique  classe Client: EntityBase 
{ 
 [Key] 
 publique  int Id { get ; ensemble ;}
  publique  string FirstName { get; définir ;} 
}

En cas de stress ici que le schéma de base de données et la carte à la classe doit toujours être synchronisés. Dans le cas contraire, EF Core lancera une exception, ce qui signifie que même si vous ajoutez une nouvelle colonne dans la table peut être vide, peut être un problème. D'autre part, ajouter une propriété publique à la classe peut aussi être problématique, cependant, dans ce cas. Utiliser les propriétés NoMapped ne jetteront pas une exception.

 

2: injection de chaîne de connexion

Le présent procédé peut remplacer classe OnConfiguring DbContext, qui accepte un objet de générateur d'option, chacun d'eux étant supporté fournisseur brut fournit une extension de la méthode originale, y compris SQL Server.SQLite.

 publique  classe SqlServerDbContext: DbContext, IDisposable 
{ 
      protégé  override  vide OnConfiguring (DbContextOptionsBuilder optionsBuilder) 
        { 
            optionsBuilder.UseSqlServer (ConnectionString); 
        } 
}

Mais la réalité, vous devez utiliser des chaînes différentes pour différents environnements (production, développement, mise en scène, etc.), cette situation, vous devez trouver un moyen d'injecter une chaîne. Alors classe DbContext pour ajouter une propriété globale statique,

 privé  statique  chaîne ConnectionString { obtenir ; définir ; }

En général, la chaîne de connexion lue à partir du fichier de configuration, et configuré pour démarrer l'application

publique  vide Configurer (app IApplicationBuilder, IWebHostEnvironment env) 
{ 
  YourDataBase.ConnectionString =! env.IsDevelopment ()?
  « Chaîne de connexion de production » :    
   « chaîne de connexion de développement » :     
}

3: injection objet DbContext

Selon isoler les préoccupations faites, je ne recommande pas

Dans les ConfigureServices

var connString = Configuration.GetConnectionString ( " votre_base_de_données " ); 
services.AddDbContext <votre_base_de_données> (option => option.UserSqlServer (connString));

4: Créer automatiquement la base de données

Lorsque la base de données n'existe pas encore, créer des différences EF6 code de la base de données souhaitée. EFCore doit demander explicitement cette étape. Une base de données pour être automatiquement membre à l'usure. Promoteur exige le code suivant dans la fenêtre de configuration de classe

var db = nouveau votre_base_de_données (); 
db.Database.EnsureCreated ():

Si la base de données n'existe pas encore. EnsureCreated la base de données est créée, sinon sauter. Les premières données sont chargées dans les opérations de base de données peuvent être entièrement contrôlés dans le code.

db.Database.SeedTables ();

() Après l'appel EnsureCreated.

À propos des données de table. Voici pas introduit, il est très basique. Ici ne veut pas dire, si vous avez utilisé un peu EF.

 

Je suppose que tu aimes

Origine www.cnblogs.com/ccaa/p/12563466.html
conseillé
Classement