2013-03-10 67 views
2

我正在使用生产者 - 许多消费者模式。阅读 - >消费 - >更新

数据库已经有记录。

  1. 生产者读取记录并将其放入线程安全队列。
  2. 消费者线程进程逐个记录并向其中添加更多数据。
  3. 现在生产者必须用消费者提供的新数据来更新数据库中的记录。

我是新的实体框架,不知道用什么方法来正确更新这些记录。

我读过,我可以从db中选择记录列表,直接编辑字段,然后在上下文对象上简单地调用SaveChanges。但我怀疑有些消费者会在列表中编辑一些属性。

+0

为什么消费者不能更新数据库? – vlad 2013-03-10 17:32:26

+0

他们可以吗?我不确定用多线程更新与相同上下文的数据库是否合适。阅读EF文件..我希望在这种情况下得到有关最佳实践的快速建议。 – user1876232 2013-03-11 02:40:38

回答

0

试试这个。第一个示例显示如何更新单个记录,第二个示例显示如何使用记录列表进行更新。只要它们是数据模型中的类型,就可以从列表中的任何对象添加或删除所需的数据。然后调用你的数据库上下文并遍历列表中的每个对象。用SaveChanges()更新数据库。

public List<Customer> MyCustomers { get; set; } 

    public void GetCustomers() 
    { 
     using(var context = new SalesContext()) 
     { 
      var customers = from b in context.Customers 
          select b; 

      MyCustomers = customers.ToList<Customer>(); 
     } 
    } 

    public void MethodThatChangesCustomers() 
    { 

    } 

    public void UpdateDatabase() 
    { 
     using(var context = new SalesContext()) 
     { 
      foreach (var person in MyCustomers) 
      { 
       context.Customers.Add(person); 
      } 
      context.SaveChanges(); 
     } 
    } 
+0

谢谢!但是,好像你没有阅读我的问题......我想读取队列中的几条记录,让消费者向它添加数据,然后将其更新回数据库。 – user1876232 2013-03-10 17:11:17

+0

当你说queue时,你指的是从数据库中抽取的对象到IEnumerable ? – 2013-03-10 17:15:13

+0

是的,正确的。拉入enumerable,然后通过调用ToList() – user1876232 2013-03-10 17:21:35

相关问题