Entity Framework Code First 關聯屬性設計

Entity Framework

最近接手Entity Framework 由於有點忘記關係導覽部分,先用簡單的銷售範例來建置導覽屬性

分別有四個檔案Customer ,Order,OrderDetail,Product ,Customer對Order是一對多,Product對 OrderDetail是一對多,Order對OrderDetail是一對多

    public partial class Customer
    {
        public int Id { get; set; }
        public string ContactName { get; set; }
        public string Phone { get; set; }
        public string Email { get; set; }

        public virtual  ICollection<Order> Orders { get; set; }
    }
    public partial class Order
    {
        public int Id { get; set; }
        public DateTime OrderDate { get; set; }

        public int CustomerId { get; set; }

        public  virtual ICollection<OrderDetail> OrderDetails { get; set; }

        public virtual Customer Customers { get; set; }
    }
    public partial class OrderDetail
    {
        public int Id { get; set; }
        public int OrderId { get; set; }
        public int ProductId { get; set; }

        public int Quantity { get; set; }

        public int Price { get; set; }

        public virtual  Order Order { get; set; }
        public virtual Product Product { get; set; }
    }
    public partial class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Price { get; set; }

        public virtual ICollection<OrderDetail> OrderDetails { get; set; }

    }
    public class KTStoreModel:DbContext
    {
        public KTStoreModel() : base("name=KTStoreModelConn")
        {
        }

        public virtual DbSet<OrderDetail> OrderDetails { get; set; }
        public virtual DbSet<Order> Orders { get; set; }

        public virtual DbSet<Product> Products { get; set; }

        public virtual DbSet<Customer> Customers { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<
                 System.Data.Entity.ModelConfiguration.Conventions.
                 PluralizingTableNameConvention>();
        }

    }

測試查詢
 

            KTStoreModel model = new KTStoreModel();
            var orderlist =
                from orderdetail in model.OrderDetails
                join order in model.Orders on
                    orderdetail.OrderId equals order.Id
                select new
                {
                     id = order.Id.ToString(),
                     product = orderdetail.Product.Name
                };

            foreach (var ordertail in orderlist)
            {
             
                Console.WriteLine($"訂單編號:{ordertail.id} 訂購商品:{ordertail.product}");
            }
            Console.WriteLine();

            IEnumerable<OrderReport> report =
                from orderdetail in model.OrderDetails
                join order in model.Orders on
                    orderdetail.OrderId equals order.Id
                select new OrderReport
                {
                    Id = order.Id,
                    CustomerName = order.Customer.ContactName,
                    OrderDate = order.OrderDate,
                    ProductName = orderdetail.Product.Name,
                    OPrice = orderdetail.Price,
                    Price = orderdetail.Product.Price,
                    Quantity = orderdetail.Quantity,
                    Sum = orderdetail.Price * orderdetail.Quantity
                };

            foreach (var order in report)
            {
                Console.WriteLine($"{order.Id} " +
                                  $"{order.OrderDate.ToShortDateString()}\t" +
                                  $"{order.ProductName} " +
                                  $"定價:{order.Price}\t" +
                                  $"單價:{order.OPrice}" +
                                  $"數量:{order.Quantity}" +
                                  $"總計:{order.Sum}");
            }

            int total = report.Sum(o => o.Sum);
            Console.WriteLine($"\n總金額:{total}");

 

元哥的筆記