2012-02-23 54 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