Identity Owin是否需要LazyLoading?

 北斗盖全球 发布于 2023-02-07 11:15

tl; dr:身份似乎要求禁用LazyLoading; 这是真的,最干净的解决方法是什么?

我使用EntityFramework 6.0.2,Identity EntityFramework 1.0.0和Identity Owin 1.0.0对一个简单的C#ASP.NET 4.5.1 MVC-5 Web应用程序进行了一些基本的AB测试,看来Owin要求延迟加载不是在ApplicationContext构造函数中禁用.

要复制该问题,只需使用Visual Studio 2013创建一个快速MVC应用程序,使用MVC模板,将所有内容保留为默认值,但取消注释该行:'app.UseGoogleAuthentication();' 在App_Start/Startup.Auth.cs中.运行该应用程序并使用Google登录,完成它带您到的缩写注册页面并转到帐户/管理.您应该会在底部看到2个Google按钮.停止应用程序.

现在转到ApplicationContext.cs并更改构造函数,如下面的代码片段所示:

public ApplicationContext() : base("DefaultConnection") { } //Works!

public ApplicationContext() : base("DefaultConnection") 
{
    this.Configuration.LazyLoadingEnabled = false;
} //Does not work

重试测试.只能显示1个Google按钮.使用LazyLoadingEnabled = false时,不会加载用户角色,登录(也可能是索赔).

我的理论是,这是微软的监督/"未来特征",因为Identity EntityFramework和Identity Owin都是1.0.0版本.

我的问题是,这个测试能否得到确认,最干净的工作是什么?

出于我的目的,我将使用.ToList()和其他方法在我想使用它时强制执行EagerLoading.我并不真的需要禁用LazyLoading,如果你想总是使用预先加载,它只是一种更安全的代码编写方式.即你错过了一个地方,它使它生产,你有一个很好的错误,在一些视图中你正在迭代模型和Model.xy y == null和数据库连接已被处置.

让我们不要进入身份与其他(更强大)的方法,或者:

using (DatabaseContext) { //Database query } 

或者在每个方法上调用dispose,而不是自动处理连接.在这种情况下,您必须使用Identity Owin,并尽快处理所有数据库调用.应该有一些我缺少的东西,或者也许现在身份确实不完整.

1 个回答
  • 是的,这是我们在2.0.0-alpha1版本中修复的错误.在事先明确禁用lazyLoading的情况下,EF不会自动加载关联的用户实体(登录/声明/角色)

    2023-02-07 11:17 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有