2012-02-23 55 views
1

我有一個薄DAL暴露利用實體框架的CRUD操作(.NET 4.0)數據綁定到列表<>與實體框架

我能有一個被自動更新以反映在我的模型更新的列表?它是一個單用戶(服務)應用程序。

List<Advertisement> list = dal.GetActiveAdvertisements(); 

list.Count是5

dal.InsertActiveAdvertisements(newAdvertisement); 

list.Count仍然是5,但是我想有6項。

我可以做到這一點嗎?

感謝耶爾

回答

1

什麼你問做很容易,但可能不是好的做法:

public class DAL { 

    private List<Advertisement> _activeAdvertisements; 
    public List<Advertisement> GetActiveAdvertisements() 
    { 
     return _activeAdvertisements ?? _activeAdvertisements = // ... data access; 
    } 
    public void InsertActiveAdvertisements(Advertisement newAdvertisement) 
    { 
     var adList = GetActiveAdvertisements(); 
     adList.Add(newAdvertisements); 
     // ... Add values to the database 
    } 
} 

我不會親手做的事情是這樣的:

  1. 這是不是線程安全的:如果兩個線程嘗試同時添加廣告,則可能有問題。
  2. 很容易與數據庫不同步。如果在DAL的不同實例中添加廣告,該怎麼辦?
+0

'ObservableCollection'在這種情況下會更好 – Eranga 2012-02-23 15:59:58

+0

那麼你會怎麼做呢?在此先感謝:) – phoog 2012-02-23 16:03:06

+0

@phoog:當然,這取決於具體情況,但我可能會先返回一個IEnumerable ',因爲我不希望消費者更改我返回的列表。確定返回的集合是短暫的:如果有人想要更新的列表,他們需要每次向DAL服務請求它。然後將該列表緩存在一個靜態MemoryCache中,並告訴緩存在有人添加廣告時自行清除。或者使用任何其他緩存策略:重點是由於消費者總是去你的班級獲得更新的列表,所以你有一個控制點。 – StriplingWarrior 2012-02-23 16:49:12