// définit le nom de la table, par défaut le nom de la classe est utilisées
[Table("Items")]
publicclassItem
{
publicint Id { get; set; }
[Column("My_Name")] // mappingpublicstring Name { get; set; }
// définit le type SQL qui sera utilisé pour le stockage de la donnée, ici un décimal de 7 chiffres dont 2 après la virgule
[Column(TypeName = "decimal(7, 2)")]
publicdecimal Price { get; set; }
[Column(TypeName = "date")]
publicDateTime Date { get; set; }
}
Data/MyContext.cs
publicclassMyAppContext : DbContext
{
// nécessaire pour l'appel services.AddDbContextpublicComptesContext(DbContextOptions<ComptesContext> options) : base(options)
{}
publicDbSet<Item> Items { get; set; }
// pour ASP.NET Core, préférer la configuration dans Startup.ConfigureServicesprotectedoverridevoidOnConfiguring(DbContextOptionsBuilderoptionsBuilder)
{
optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["SqlServerConnectionString"].ConnectionString);
}
}
# tester si Entity Framework Core Tooling est fonctionnel
dotnet ef
# bien se mettre dans le dossier du projet# faire un dotnet restore au cas où la restoration n'aurait pas fonctionnée# création du fichier de migration
dotnet ef migrations add InitialCreate
# un fichier YYYYMMDDHHMMSSS_IntialCreate.cs est créé dans le dossier Migration# supprimer la dernière migration
dotnet ef migrations remove
# génération et exécution du script SQL
dotnet ef database update
# génération d'un script SQL
dotnet ef migrations script <FROM> <TO>
# From: 0 par défaut# To: dernière migration par défaut
EF Core 3.x
# dotnet ef must be installed as a global or local tool
dotnet tool install --global dotnet-ef
# installed in ~/.dotnet/tools# Add ~/.dotnet/tools to PATH
Si le fichier de projet ne contient pas Microsoft.EntityFrameworkCore.Tools.DotNet, l'ajouter. (version)
À la sauvegarde NuGet va restaurer les paquets nécessaires.
EF fait ses requêtes en lazy loading, ce qui veut dire que les requêtes SQL ne sont exécutées que lorsqu'on a besoin des données.
// 1 requête pour récupérer tous les contactsIEnumerable<Contact> allContacts = context.Contacts;
foreach (var contact in allContacts)
{
// pour récupérer l'age de chaque contact il faut faire une nouvelle requête pour chaque contact// ce qui donne de mauvaises performancesif (contact.age > 30) { /* ... */ }
}
// inclure Age lors de la récupération des contacts// ainsi tous se fait en une seule requêteIEnumerable<Contact> allContacts = context.Contacts.Include(c => c.Age);
<ProjectSdk="Microsoft.NET.Sdk"><!-- Ajouter le groupe suivant --><ItemGroup><DotNetCliToolReferenceInclude="Microsoft.EntityFrameworkCore.Tools"Version="2.0.0" /><DotNetCliToolReferenceInclude="Microsoft.EntityFrameworkCore.Tools.DotNet"Version="2.0.0" /></ItemGroup>