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

标签 c# asp.net-mvc-5 entity-framework-6 asp.net-identity owin

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/

相关文章:

c# - 谷歌云存储 InsertMediaUpload 服务 BaseUri ArgumentNullException

c# - 如何在项目中使用 T4 自定义脚手架?

c# - 使用 Web 服务的前线身份验证

c# - 如何使用 DisplayNameForModel?

c# - 如何在 ASP.net 中安全地延迟 Web 响应?

c# - EF 代码优先 : Sequence contains more than one matching element

c# - mailto 的更好替代方案

c# - 将 DisplayFormatAttribute.ConvertEmptyStringToNull 的默认值设置为 false

c# - TPT 基类主键标识约定

c# - EntityCollection - ICollection<InterfaceTEntity> - 运行时问题/怪癖