第五話-數據關連與繼承

一對多的例子

Model

一端:

public class OrderMaster
{
    public int Id {get; set;}
    public DateTime OrderDate {get ; set; }

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

最後一行的OrderDetailICollection集合對象,表示與此OrderDetail有關的所有OrderMaster對象 EF會根據此句建立兩者維護的關聯設置。

多端

public class OrderDetail
{
    public int Id {get; set;}
    public string ProductName {get ; set; }
    public int Quantity {get; set;}
    public int Price {get; set;}

    public int OrderDetailId {get; set;} //指定FK
    public virtual OrderMaster OrderMaster {get; set;} 
}

調用

var result = from bat in db.OrderDetails join bah in
             db.Orders on bat.OrderId eqauls order.Id
             select new { bat,bah };
             // select new report 
             // {
             //   Id=bah.Id,
             //   CustomerName=bah.Name,
             //   OrderDate=bah.Date
             //   ProductName = bat.Name
             //   Price = bat.price
             // }

加載(Loading)

調整virtual屬性

  • Lazy Loading:需要的時候再加載數據 ` context.Configuration.LazyLoadingEnabled= false`這樣便不會自動載入關聯數據。
  • Eager Loading:直接載入(預設)

Include方法與對象加載

var result = db.Customers.Include(OrderMasters.OrderDetails).Include(OrderMasters.OrderDetails.Product").Where(c=>c.Id<5)