私が理解しているように、 Parallel での作業DataContext
はスレッドセーフではありませんが、コンテキストを次のように宣言した場合にのみstatic
(MSDN のドキュメントに基づいて) これが私がしたことです。
MSDN : スレッド セーフ http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.aspx
に関連する通常のエラーが発生しているようでDataContext
、それはスレッドセーフの欠如です。
ここで、私がやりたいことと、私の望む結果を少し説明します。この場合、専門家の助けとアイデアを得られることを願っています。
10万件程度のレコードに対して重い分析処理をしたいのですが、
エラーは次のとおりです。
EntityMemberChanged または EntityComplexMemberChanged が、最初に同じプロパティ名を持つ同じ変更トラッカーで EntityMemberChanging または EntityComplexMemberChanging を呼び出さずに呼び出されました。変更を適切に報告する方法については、Entity Framework のドキュメントを参照してください。
Designer コードで次の行を指定します。
ReportPropertyChanged("ProductName");
私のコードには何がありますか:
//On form Load
if (Repository.ContextP == null)
Repository.ContextP = new dbEntities();
private void btnProcess_Click(object sender, EventArgs e)
{
Task.Factory.StartNew(() =>
Process(), TaskCreationOptions.LongRunning);
}
private void Process()
{
var query = from W in Repository.ContextP.Products
select W;
Parallel.ForEach(query, options , product =>
{
// There are some heavy processes to get stFormattedDef
product.ProductName= stFormattedDef;
}
}
// The Repository - static
static class Repository
{
public static dbEntities ContextP { get; set; }
}
セキュリティとデータ コンテキスト 分析がビルド段階にあり、ローカルであるため、ライフタイムが問題になることはありません。
私は何を間違えましたか?
助言がありますか?
同様のケースでのアイデアや経験はありますか?