Csharp/C#教程:Identity Owin是否需要LazyLoading?分享


Identity Owin是否需要LazyLoading?

tl; dr:Identity似乎要求禁用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,并尽快处理所有数据库调用。 应该有一些我缺少的东西,或者也许现在身份确实不完整。

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

上述就是C#学习教程:Identity Owin是否需要LazyLoading?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/998195.html

(0)
上一篇 2021年12月26日
下一篇 2021年12月26日

精彩推荐