实体框架核心如何在保存上下文之前处理实例



当发生以下情况时,实体框架如何工作:

var myInstance = new MyObject();
// Do stuff
_myContext.MyObjects.Add(myInstance);
myInstance = null;
_myContext.SaveChanges();

我遇到了这一综合件事的事情,似乎仍然可以做到预期的事情。但是我很好奇它是如何处理它的,并且当实例为null时,它是否放弃跟踪对象。

我很好奇它如何处理它,并且当实例为null

时,它是否放弃跟踪对象

在您的示例中,实例是不是 null-仅 actible myInstance值是 null,即变量不保留对您创建的对象的引用。

如何以简化的形式跟踪实例,您可以将其视为MyObjectsList<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实例包含某种列表,其中包含所有"跟踪"实体实例及其状态(AddedDeleted等(。

相关内容

  • 没有找到相关文章