Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在MVC应用程序中使用EF延迟加载的实例_Asp.net Mvc_Entity Framework_Lazy Loading - Fatal编程技术网

Asp.net mvc 在MVC应用程序中使用EF延迟加载的实例

Asp.net mvc 在MVC应用程序中使用EF延迟加载的实例,asp.net-mvc,entity-framework,lazy-loading,Asp.net Mvc,Entity Framework,Lazy Loading,有人能给出在MVC应用程序中使用EF延迟加载的正确且有用的示例吗 我试图研究这个问题,但找不到合适的理由 因此,我的结论是:由于web应用程序是无状态的,所以将LL包含到实体中是没有意义的。但听起来很奇怪。这就是问题所在的原因 你能证实或反驳我的结论吗 编辑 在我看来,“无国籍”这句话在我看来很重要。让我们假设两个场景。第一个与WPF应用程序相关,第二个与MVC相关。假设thre是下一个简单对象: public class Person { public int Age { get;

有人能给出在MVC应用程序中使用EF延迟加载的正确且有用的示例吗

我试图研究这个问题,但找不到合适的理由

因此,我的结论是:由于web应用程序是无状态的,所以将LL包含到实体中是没有意义的。但听起来很奇怪。这就是问题所在的原因

你能证实或反驳我的结论吗

编辑

在我看来,“无国籍”这句话在我看来很重要。让我们假设两个场景。第一个与WPF应用程序相关,第二个与MVC相关。假设thre是下一个简单对象:

public class Person 
{ 
    public int Age { get; set; } 
    public string Name { get; set; } 
    ... 
    public virtual List<Activity> Activities { get; set; } 
}
公共类人物
{ 
公共整数{get;set;}
公共字符串名称{get;set;}
... 
公共虚拟列表活动{get;set;}
}
1) WPF。用户可以请求唯一没有活动的人。因此,他得到了一小部分数据。管理费用是合理的。同时,用户可以决定请求人员的活动。 由于ll机制,EF只需加载活动而无需再次请求person对象,因为person仍然存在于应用程序中(当然,如果我们以这种方式编码它的话)

2) MVC。同样的行动也存在。但唯一的区别是,在服务器响应之后,包括对象人在内的所有资源都将被处理。我们不能像在WPF应用程序中那样加载Person活动。我们被迫再次加载Person(与WPF应用程序相比,开销有所增加)


关键是,延迟加载只能在实体所连接的上下文的范围内执行-如果您处理了上下文,则无法使用它。

我认为您不理解延迟加载的作用,因为它与是否存在任何状态无关。这不像缓存之类的东西。延迟加载只是实体框架重载属性以添加自定义getter,该getter在首次访问属性时发出查询以获取对象或对象集

例如,如果您有以下情况:

public class Foo 
{
    public virtual Bar Bar { get; set; }
}

如果要从数据库中查询一组
Foo
s,所有这些对象上的
Bar
属性都将为空,因为EF不会发出任何查询来获取相关的
Bar
实例。但是,如果您要迭代此
Foo
列表并访问
Bar
(也就是说,
foo.Bar.Baz
,那么EF会对
Bar
实例发出一个即时查询,这样它就可以返回其上的
Baz
属性。

我认为你不理解延迟加载的作用,因为它与是否存在任何状态无关。它不像缓存或其他东西。延迟加载是暗示实体框架重载属性以添加自定义getter,该getter在首次访问属性时发出查询以获取对象或对象集

例如,如果您有以下情况:

public class Foo 
{
    public virtual Bar Bar { get; set; }
}

您要从数据库中查询一组
Foo
s,它们上的
Bar
属性都将为空,因为EF不会发出任何查询来获取相关的
Bar
实例。但是,如果您要迭代
Foo
列表并访问
Bar
(也就是说,
foo.Bar.Baz
,EF会对
Bar
实例发出一个即时查询,这样它就可以返回其上的
Baz
属性。

参考此链接:你能仔细阅读这个问题吗?你的链接根本没有回答它。我知道延迟加载是什么,但我想知道是否有任何合理的场景在web应用程序中使用它有很多问题。参考本文:呵呵,我认为你没有正确地理解这个问题。我想了解通过EF延迟加载实体是否可以在asp.net mvc应用程序中正确使用,还是最好始终使用快速加载。你的文章在这方面如何帮助我?我认为你没有阅读这两篇文章,1第一篇文章告诉你如何通过EF在MVC应用程序中使用延迟加载,第二篇文章告诉你为什么我们需要使用延迟加载,以及如何通过使用包括延迟加载在内的许多技巧来改进我们的web应用程序。你怎么能说这些文章超出了你的主题。请先仔细阅读这两篇文章,然后讨论偏离主题的要点。Bu请不要先阅读…希望你能明白。谢谢提供此链接:你能仔细阅读此问题吗?你的链接根本无法回答。我知道延迟加载是什么,但我想知道在web应用程序中使用它是否有任何合理的方案。参考本文:嘿,我认为你没有正确理解此问题。我想了解通过EF加载实体可以在asp.net mvc应用程序中正确使用,或者最好始终使用即时加载。您的文章如何在这方面帮助我?我想您没有阅读这两篇文章,第一篇文章告诉您如何通过EF在mvc应用程序中使用延迟加载,第二篇文章告诉您为什么需要使用延迟加载以及如何通过使用包括延迟加载在内的许多技巧来改进我们的web应用程序。你怎么能说这些文章超出了你的主题。请先仔细阅读这两篇文章,然后讨论偏离主题的要点。但请先阅读……希望你能明白这一点。谢谢你能看看有问题的编辑部分吗?希望你能理解我的观点我想他指的是网络的无状态,以及每个请求都将实例化控制器和相应的ef上下文的事实。@fran,是的,伙计。你明白了。让我们发布你关于回答问题的想法)谢谢)@Fran:明白了。但是,这仍然与此无关。任何延迟加载都会发生在与原始查询相同的请求和上下文实例中。一个新请求需要一个新上下文和一个新查询(延迟加载或不延迟加载)。@Fran:再次,选择t