为了账号安全,请及时绑定邮箱和手机立即绑定

在Entity Framework 4中默认禁用延迟加载

在Entity Framework 4中默认禁用延迟加载

似乎在EF4中默认启用了延迟加载。至少在我的项目中,我可以看到dataContext.ContextOptions.LazyLoadingEnabled默认情况下为true。我不想延迟加载,也不想写:dataContext.ContextOptions.LazyLoadingEnabled = false;每次获得新的环境时。那么有没有办法默认关闭整个项目?
查看完整描述

3 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

以下答案涉及“ 数据库优先”或“ 模型优先”工作流(当提出问题时,只有两个工作流可用于Entity Framework(版本<= 4.0))。如果您使用的是Code-First工作流程(自EF版本> = 4.1起可用),请向史密斯(ssmith)回答此问题,以获取正确的解决方案。


edmx文件在<ConceptualModel>和<EntityContainer>定义中具有延迟加载的属性,您可以在其中将延迟加载通常设置为false:


<EntityContainer Name="MyEntitiesContext" annotation:LazyLoadingEnabled="false">

这将在ObjectContext构造函数中创建以下设置:


public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext")

{

    this.ContextOptions.LazyLoadingEnabled = false;

    OnContextCreated();

}

我的示例并不意味着应该手动编辑生成的ObjectContext(或DbContext在新的EF版本中)(如ctorx指出的那样,数据库中的每个模型更新都将其覆盖),而是EDMX文件部分中的EntityContainer元素edmx:ConceptualModels应该通过添加annotation:LazyLoadingEnabled="false"属性来进行编辑-在XML编辑器中手动创建,或者在设计器界面的属性页面上(也可以使用此选项)进行手动编辑,右键单击EDMX,然后单击“属性”。

//img1.sycdn.imooc.com//5da95c330001d76c03490397.jpg

EDMX文件的此修改将自动在生成器中使用禁用的延迟加载选项生成上下文类,如上所示。从数据库更新模型时,EDMX文件修改本身不会被覆盖。


查看完整回答
反对 回复 2019-10-18
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

我写了一个快速示例,展示了新的延迟加载功能如何与EF Code First一起使用。在“代码优先”模型中实现所需的内容只需在DbContext的构造函数中添加一行即可,如下所示:


public BlogContext()

{

    this.Configuration.LazyLoadingEnabled = false;

}


查看完整回答
反对 回复 2019-10-18
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

如果您使用的是EF4 Code First,是吗?因此,在上下文的初始化中,将覆盖“ OnModelCreated”。


在这种方法中,我只需调用并设置属性即可解决所有问题。


protected override void OnModelCreating(DbModelBuilder modelBuilder) {

     base.Configuration.LazyLoadingEnabled = false;

}

我的模型现在更可口了。延迟加载很棒...但是当您不想要它时则不然。当您开始使用循环引用时,这很荒谬。


查看完整回答
反对 回复 2019-10-18
  • 3 回答
  • 0 关注
  • 709 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信