在这个关于 DbContext 的线程安全的问题(不是)之后,我需要知道在多个线程中处理映射的 POCO 是否安全。
假设我有两个使用 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 添加到上下文中:
_context.Poco2s.Add(childPoco);
_context.SaveChanges();
我没有对辅助线程中的上下文做任何事情,但我正在操作映射到它的对象。
我可以这样做吗?