我正在使用生产者 - 许多消费者模式。阅读 - >消费 - >更新
数据库已经有记录。
- 生产者读取记录并将其放入线程安全队列。
- 消费者线程进程逐个记录并向其中添加更多数据。
- 现在生产者必须用消费者提供的新数据来更新数据库中的记录。
我是新的实体框架,不知道用什么方法来正确更新这些记录。
我读过,我可以从db中选择记录列表,直接编辑字段,然后在上下文对象上简单地调用SaveChanges
。但我怀疑有些消费者会在列表中编辑一些属性。
我正在使用生产者 - 许多消费者模式。阅读 - >消费 - >更新
数据库已经有记录。
我是新的实体框架,不知道用什么方法来正确更新这些记录。
我读过,我可以从db中选择记录列表,直接编辑字段,然后在上下文对象上简单地调用SaveChanges
。但我怀疑有些消费者会在列表中编辑一些属性。
试试这个。第一个示例显示如何更新单个记录,第二个示例显示如何使用记录列表进行更新。只要它们是数据模型中的类型,就可以从列表中的任何对象添加或删除所需的数据。然后调用你的数据库上下文并遍历列表中的每个对象。用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();
}
}
谢谢!但是,好像你没有阅读我的问题......我想读取队列中的几条记录,让消费者向它添加数据,然后将其更新回数据库。 – user1876232 2013-03-10 17:11:17
当你说queue时,你指的是从数据库中抽取的对象到IEnumerable
是的,正确的。拉入enumerable,然后通过调用ToList() – user1876232 2013-03-10 17:21:35
为什么消费者不能更新数据库? – vlad 2013-03-10 17:32:26
他们可以吗?我不确定用多线程更新与相同上下文的数据库是否合适。阅读EF文件..我希望在这种情况下得到有关最佳实践的快速建议。 – user1876232 2013-03-11 02:40:38