1

DbContext のスレッド セーフに関するこの質問に続いて (そうではありません)、マップされた POCO を複数のスレッドで安全に処理できるかどうかを知る必要があります。

CodeFirst を使用してデータベースにマップされた 2 つのオブジェクトがあるとします。

class Poco1
{
    public int Id { get; set; }
    public string SomeProp {get; set;}
    public virtual List<Poco2> children { get; set; }
}

class Poco2
{
    public int id { get; set;}
    public Poco1 parent { get; set; }
}

メインスレッドで Poco1 を読み込んでいます:

var parentPoco = _context.Poco1s.Where(...).Single();

次に、それをタスクに渡します。そこで別のオブジェクトを作成し、親を少し変更します

var childPoco = new Poco2 { parent=parentPoco }; 
parentPoco.SomeProp = "Tasked!";

次に、メイン スレッドに戻り、childPoco をコンテキストに追加します。

_context.Poco2s.Add(childPoco);
_context.SaveChanges();

セカンダリ スレッドのコンテキストでは何もしていませんが、それにマップされているオブジェクトを操作しています。

それをしてもいいですか?

4

1 に答える 1

1

それらが「純粋な」POCO(変更の追跡や遅延読み込みなし)であり、「元の」スレッドで使用されている他のオブジェクトへの参照がない場合は、問題ありません。しかし、ほとんどの人は「不純な」POCOプロキシを使用します。これは、並行スレッドから安全に使用することはできません。

于 2012-10-11T13:06:43.523 に答える