gpt4 book ai didi

c# - Identity Owin 是否需要延迟加载?

转载 作者:太空狗 更新时间:2023-10-29 18:22:20 24 4
gpt4 key购买 nike

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 应用程序上进行了一些基本的 A-B 测试,看起来 Owin 需要 lazy 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,用户角色、登录(也可能声明)不会加载。

我的理论是,这是 Microsoft 的疏忽/“ future 功能”,因为 Identity EntityFramework 和 Identity Owin 都是 1.0.0 版。

我的问题是,这个测试能否得到确认,最干净的解决方法是什么?

出于我的目的,我将只使用 .ToList() 和其他方法在我想使用它时强制执行 EagerLoading。我真的不需要禁用 LazyLoading,如果您想始终使用预先加载,这只是一种更安全的编码方式。也就是说,你错过了一个地方,它进入了生产环境,并且你有一个很好的错误,在某些 View 中你正在迭代模型和 Model.x.y y == null 并且数据库连接已被释放。

我们不要讨论 Identity 与其他(更强大的)方法,或者:

using (DatabaseContext) { //Database query } 

或在每个方法上调用 dispose 与让连接自动释放。在这种情况下,您必须使用 Identity Owin,并尽快处理所有数据库调用。应该有一些我遗漏的东西,或者也许身份现在真的是那么不完整。

最佳答案

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

关于c# - Identity Owin 是否需要延迟加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20868836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com