2014-01-26 25 views
0

我使用實體框架5.0 CodeFirst方法計算的INSERT,UPDATE,在EF代碼第一列和刪除

我有兩個表

public class Order 
{ 
    public int Id { get; set; } 

    public int OrderAmount { get; set; } 

    public virtual IList<OrderItem> OrderItems { get; set; } 
} 

public class OrderItem 
{ 
    public int Id { get; set; } 

    public int Amount { get; set; } 

    public virtual Order Order { get; set; } 
} 

OrderAmount爲了表是各量的總和OrderItem的 我需要OrderAmount自動計算當我插入訂單 或當我更新訂單項目的數量

我不推我的邏輯到數據庫(我不想使用[DatabaseGenerated(DatabaseGeneratedOption.Com puted),並計算在數據庫中這個值)

而且我知道,可以使用

Public int OrderAmount{get{CalcSumOfOrderAmount()};set{}} 

,但問題是,即使我想在一個網格CalcSumOfOrderAmount()方法運行show命令,它粗澀額外負載

有什麼辦法CalcSumOfOrderAmount()方法只能在插入更新和刪除運行,並不運行選擇(實際上選擇只是從數據庫中讀取日期)?

回答

0

您可以使用ObservableCollection<T>

public class Order 
{ 
    public int Id { get; set; } 

    public int OrderAmount { get; set; } 

    public virtual ObservableCollection<OrderItem> OrderItems 
    { 
     get 
     { 
      if (orderItems == null) 
      { 
       orderItems = new ObservableCollection<OrderItem>(); 
       orderItems.CollectionChanged += (s, args) => 
       { 
        OrderAmount = OrderItems.Sum(item => item.Amount); 
       } 
      } 
      return orderItems; 
     } 
    } 
    private readonly ObservableCollection<OrderItem> orderItems; 
} 

注意,我做了集合爲只讀屬性(這是足夠的物化/保存實體和操作收集數據)。如果由於某種原因仍然需要讀取/寫入OrderItems,那麼邏輯會稍微複雜一些,但總的想法是一樣的。