Asp.net core 使用CreateProxy的好处<;用户帐户>;()vs新用户帐户()

Asp.net core 使用CreateProxy的好处<;用户帐户>;()vs新用户帐户(),asp.net-core,entity-framework-core,Asp.net Core,Entity Framework Core,使用带有延迟加载代理的实体框架核心,我有一个UserAccount模型,它有一个属性“LocalizationId”和一个延迟加载导航属性“Localization” 使用DatabaseContext.CreateProxy()与使用new UserAccount()相比有什么好处 在这两种情况下,一旦将模型添加到DatabaseContext,并且设置了导航属性的Id,导航属性将延迟加载,并按预期跟踪更改 var model = new Models.UserAccount() { Lo

使用带有延迟加载代理的实体框架核心,我有一个UserAccount模型,它有一个属性“LocalizationId”和一个延迟加载导航属性“Localization”

使用DatabaseContext.CreateProxy()与使用new UserAccount()相比有什么好处

在这两种情况下,一旦将模型添加到DatabaseContext,并且设置了导航属性的Id,导航属性将延迟加载,并按预期跟踪更改

var model = new Models.UserAccount()
{
  LocalizationId = 1
};
DatabaseContext.Add(model);
var proxy = DatabaseContext.CreateProxy<Models.UserAccount>();
DatabaseContext.Add(proxy);
proxy.LocalizationId = 1;

var proxyLocalization = proxy.Localization.Name;
var modelLocalization = model.Localization.Name;
var model=new Models.UserAccount()
{
本地化ID=1
};
DatabaseContext.Add(model);
var proxy=DatabaseContext.CreateProxy();
DatabaseContext.Add(代理);
proxy.LocalizationId=1;
var proxyLocalization=proxy.Localization.Name;
var modelLocalization=model.Localization.Name;

我觉得我必须忽略一些明显的东西,因为我看不到使用CreateProxy的好处。

不同之处在于,
CreateProxy
创建的对象可以稍后加载相关的实体,而不是


这两个对象的结果相同,因为
var proxyLocalization=proxy.Localization.Name
已加载本地化对象并添加到更改跟踪器。Change tracker已找到您的非代理对象并自动初始化了相关属性。

如果我删除与代理对象关联的代码并运行SQL Profiler,则仅当访问该属性时,本地化才会正确延迟加载。它的行为似乎与代理对象相同,这就是我感到困惑的原因。如果Id==1的本地化类已经在Change Tracker中,它将被自动分配。使用不同的ID创建干净的测试。从技术上讲,无法通过
model.Localization.Name
加载本地化,它应该抛出
NullPointerException
抱歉,启用了UseLazyLoadingProxies,但该模型也使用ILazyLoader实现,这解释了为什么不使用CreateProxy就可以工作。。。对不起,浪费了你的时间。