我正在使用生產者 - 許多消費者模式。閱讀 - >消費 - >更新
數據庫已經有記錄。
- 生產者讀取記錄並將其放入線程安全隊列。
- 消費者線程進程逐個記錄並向其中添加更多數據。
- 現在生產者必須用消費者提供的新數據來更新數據庫中的記錄。
我是新的實體框架,不知道用什麼方法來正確更新這些記錄。
我讀過,我可以從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