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.