L'objectif de cet exercice est de vous familiariser avec Entity Framework (EF), un ORM (Object-Relational Mapper) populaire pour .NET, en créant et manipulant une base de données à partir d'un programme console. Vous allez apprendre à configurer EF, à créer des entités, à configurer un DbContext, à effectuer des opérations CRUD (Create, Read, Update, Delete), et à interroger la base de données en utilisant LINQ.
Microsoft.EntityFrameworkCore
v6.X.XMicrosoft.EntityFrameworkCore.SqlServer
v6.X.XMicrosoft.EntityFrameworkCore.Tools
v6.X.XModels
et ajoutez-y les classes BO fournis dans l'Exercice 4 ApplicationDbContext
:
using Microsoft.EntityFrameworkCore;
namespace Ex06_EntityFramework.Models
{
public class ApplicationDbContext : DbContext
{
public DbSet Warehouses { get; set; }
public DbSet Articles { get; set; }
public DbSet Orders { get; set; }
public DbSet OrderDetails { get; set; }
public ApplicationDbContext()
{
}
public ApplicationDbContext(DbContextOptions options) : base(options)
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=Ex06_EntityFramework;Trusted_Connection=True;");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(o => o.OrderDetails)
.WithOne(od => od.Order)
.HasForeignKey(od => od.OrderId);
modelBuilder.Entity()
.HasOne(od => od.Article)
.WithMany()
.HasForeignKey(od => od.ArticleId);
modelBuilder.Entity()
.Property(e => e.CodeAccesMD5)
.HasConversion(v => string.Join(";", v),
v => v.Split(new[] { ';' }, StringSplitOptions.None).ToList());
}
}
}
Package Manager Console
et exécutez les commandes suivantes :Add-Migration InitialCreate
Update-Database
Main
, ajoutez le code suivant pour insérer des données :using Ex06_EntityFramework.Models;
internal class Program
{
private static void Main(string[] args)
{
InsertDefaultData();
}
private static void InsertDefaultData()
{
using (var context = new ApplicationDbContext())
{
var warehouse = new Warehouse
{
Name = "Entrepot de Paris",
Address = "10 rue du csharp",
PostalCode = 75000,
CodeAccesMD5 = new List
{
"840e998a22948adf5de39bd4f2b35da7" ,
"74b87337454200d4d33f80c4663dc5e5"
}
};
var articles = new List
{
new Article { Name = "Ordinateur Portable", Description = "Ordinateur portable haute performance", Price = 1200.00m, StockQuantity = 50 },
new Article { Name = "Smartphone", Description = "Smartphone avec écran AMOLED", Price = 800.00m, StockQuantity = 100 },
new Article { Name = "Tablette", Description = "Tablette 10 pouces avec stylet", Price = 600.00m, StockQuantity = 30 }
};
var orders = new List
{
new Order
{
Warehouse = warehouse,
CustomerId = 1,
Email = "johndoe@example.com",
ShippingAddress = "123 Main Street",
OrderDate = DateTime.Now,
TotalAmount = 2000.00d,
OrderStatus = "Processing",
OrderDetails = new List
{
new OrderDetail { Article = articles[1], Quantity = 1, UnitPrice = 1200.00m },
new OrderDetail { Article = articles[1], Quantity = 1, UnitPrice = 800.00m }
}
},
new Order
{
Warehouse = warehouse,
CustomerId = 2,
Email = "bill.gate@example.com",
ShippingAddress = "One Microsoft Way",
OrderDate = DateTime.Now,
TotalAmount = 2000.00d,
OrderStatus = "Processing",
OrderDetails = new List
{
new OrderDetail { Article = articles[2], Quantity = 1, UnitPrice = 800.00m }
}
}
};
context.Warehouses.Add(warehouse);
context.Articles.AddRange(articles);
context.Orders.AddRange(orders);
context.SaveChanges();
}
}
}
Exemple pour obtenir tous les articles :
static void DisplayAllArticles()
{
using (var context = new ApplicationDbContext())
{
var articles = context.Articles.ToList();
foreach (var article in articles)
{
Console.WriteLine($"ID: {article.Id}, Name: {article.Name}, Price: {article.Price}, NbStock: {article.StockQuantity}");
}
}
}
public interface IWarehouseService
{
// Method to fetch all warehouses
List<Warehouse> getAllWarehouses();
}
public interface IArticleService
{
// Method to add new article
Article add(Article article);
// Method to update the stock quantity of an Article
Article updateArticleStock(int itemId, int quantity);
// Method to fetch all Articles that are below given stock
List<Article> getArticlesBelowStock(int stock);
// Method to get total sales for each Article
Dictionary<Article, int> getTotalSalesPerArticle();
}
public interface IOrderService
{
// Method to add new Order
Order add(Order order);
// Method to delete an order
void deleteOrder(int orderId);
// Method to fetch all orders made by a specific customer
List<Order> getAllOrdersByCustomer(int customerId);
// Method to get average order value
double getAverageOrderValue();
// Method to get average number article by order
double getAverageArticlePerOrder();
}
Un Customer peut détenir plusieurs commandes.
Une commande appartient à un seul Customer.
Une adresse doit être un ValueObject.
Vous serez évalué sur votre capacité à :
Bonne chance !