using System.Collections.Generic;
using System.Data.Entity;
public static void Main()
using (var context = new EntityContext())
var list = context.Customers
.Include(customer => customer.Orders)
.ThenInclude(order => order.OrderDetails)
.ThenInclude(orderDetail => orderDetail.Product)
FiddleHelper.WriteTable("Customers", list);
FiddleHelper.WriteTable("Orders", list.SelectMany(x => x.Orders).ToList());
FiddleHelper.WriteTable("OrderDetails", list.SelectMany(x => x.Orders.SelectMany(y => y.OrderDetails)));
FiddleHelper.WriteTable("Products", list.SelectMany(x => x.Orders.SelectMany(y => y.OrderDetails.Select(z => z.Product))));
public static void GenerateData()
using (var context = new EntityContext())
var supplier = context.Suppliers.Add(new Supplier() { Name = "ZZZ Projects" });
var category = context.Categories.Add(new Category() { Name = "EntityFramework", Description = "Entity Framework is an ORM made by Microsoft. It allows performing CRUD operations without having to write SQL queries. It supports Code First, Database First, Stored Procedure, Transaction, etc." });
var productEFClassic = context.Products.Add(new Product() { Name = "Entity Framework Classic", Category = category, Supplier = supplier });
var productEFExtensions = context.Products.Add(new Product() { Name = "Entity Framework Extensions", Category = category, Supplier = supplier });
var customer = context.Customers.Add(new Customer() { Name ="Customer_A", Description = "Description", IsActive = true, LastLogin = new DateTime(2010,1,1) });
var order = context.Order.Add(new Order() { Customer = customer, OrderDate = DateTime.Now, OrderDetails = new List<OrderDetail>() });
order.OrderDetails.Add(new OrderDetail() { Product = productEFClassic, Quantity = 4 });
order.OrderDetails.Add(new OrderDetail() { Product = productEFExtensions, Quantity = 19 });
public class EntityContext : DbContext
public EntityContext() : base(FiddleHelper.GetConnectionStringSqlServer())
public DbSet<Customer> Customers { get; set; }
public DbSet<Order> Order { get; set; }
public DbSet<OrderDetail> OrderDetails { get; set; }
public DbSet<Product> Products { get; set; }
public DbSet<Category> Categories { get; set; }
public DbSet<Supplier> Suppliers { get; set; }
public int CustomerID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public DateTime LastLogin { get; set; }
public Boolean IsActive { get; set; }
public List<Order> Orders { get; set; }
public int OrderID { get; set; }
public DateTime OrderDate { get; set; }
public Customer Customer { get; set; }
public List<OrderDetail> OrderDetails { get; set; }
public int OrderDetailID { get; set; }
public int Quantity { get; set; }
public Product Product { get; set; }
public int ProductID { get; set; }
public string Name { get; set; }
public Category Category { get; set; }
public Supplier Supplier { get; set; }
public int CategoryID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int SupplierID { get; set; }
public string Name { get; set; }