当发生以下情况时,实体框架如何工作:
var myInstance = new MyObject();
// Do stuff
_myContext.MyObjects.Add(myInstance);
myInstance = null;
_myContext.SaveChanges();
我遇到了这一综合件事的事情,似乎仍然可以做到预期的事情。但是我很好奇它是如何处理它的,并且当实例为null时,它是否放弃跟踪对象。
我很好奇它如何处理它,并且当实例为null
时,它是否放弃跟踪对象
在您的示例中,实例是不是 null
-仅 actible myInstance
值是 null
,即变量不保留对您创建的对象的引用。
如何以简化的形式跟踪实例,您可以将其视为MyObjects
是List<MyObject>
(当然的实际实现当然是不同的(。因此,当您做这样的事情时会发生什么:
var myObjects = new List<MyObject>();
var myInstance = new MyObject();
// Do stuff
myObjects.Add(myInstance);
myInstance = null;
myInstance
变量是 null
,但是 myObjectList
包含对创建对象的引用(即"跟踪" it(,因此可以始终可以返回,在这种情况下,使用
var trackedInstance = myObjects[0];
再次,实际实现是不同的,但是概念是相同的 - DbContext
实例包含某种列表,其中包含所有"跟踪"实体实例及其状态(Added
,Deleted
等(。