我读过在需要使用延迟加载和更改跟踪时使用代理.换句话说,要使用延迟加载,我必须启用代理.
到现在为止还挺好.
关键是我可以使用下面的代码设置上下文不使用代理甚至使用延迟加载.
ctx = new SchoolEntities();
ctx.ContextOptions.ProxyCreationEnabled = false;
ctx.ContextOptions.LazyLoadingEnabled = true;
Run Code Online (Sandbox Code Playgroud)
ProxyCreationEnabled属性是仅与更改跟踪代理相关还是我遗漏了某些内容?
有人可以用一些细节解释一下吗?
谢谢!
EDIT1
我没有使用POCO/DbContext.我使用带有ObjectContext的常规edmx EF模型.我知道POCO实体的代理对于更改跟踪和延迟加载的重要性.为何在常规EDMX模型中使用Proxies?
我在实体框架(我相信 3.5)中创建一对多(或一对一?)关系时遇到问题。
示例表/模型:
Settings:
SettingsID pk int not null
SettingsName varchar(250) null
SettingsTypeID fk int null
SettingsType:
SettingsTypeID pk int not null
SettingsTypeName varchar(250)
Run Code Online (Sandbox Code Playgroud)
我Settings.SettingsTypeID
对该引用有一个外键约束SettingsType.SettingsTypeID
。
保存设置(使用选择settingstype
)后,值会正确保存(我已经检查了数据库以确保可以Setting.SettingsTypeID
正确看到更新的值)。
但是,在尝试settingType
根据所选检索对象时Setting
,例如
var SettingsType = Setting.SettingsType;
Run Code Online (Sandbox Code Playgroud)
Setting.SettingsType
总是回来null
?
我错过了什么吗?