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不会自动加载关联的用户实体(登录/声明/角色)