1
跟着this question關於DbContext的線程安全性(事實並非如此),我需要知道在多線程中處理映射的POCO是否安全。EF對象是線程安全的嗎?
假設我有使用CodeFirst映射到數據庫兩個對象:
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到t他的上下文:
_context.Poco2s.Add(childPoco);
_context.SaveChanges();
我沒有做任何與輔助線程中的上下文,但我操縱映射到它的對象。
我可以這樣做嗎?
只要你保持一個持有dataContext的工作者類,並從中取出POCO,那麼所有東西都應該是安全的,因爲dataContext持有對象圖 –
你是什麼意思'拋出POCO'?我只是用新的創造它們。 – zmbq
我不相信你描述的場景是線程安全的,除非你使用某種形式的同步,否則你可能會遇到競爭條件。畢竟POCO課程只是基礎課程。你爲什麼要訴諸線程? –