是否可以在mvc视图模型中传递EF实体,而不会因延迟加载而导致性能问题?



我想在视图模型的属性中传递EF实体,但我担心它可能会导致性能问题,因为DB记录的一些列值很大。然后我意识到,除非我访问那些特定的字段,否则我不会因为延迟加载而遭受惩罚。这是正确的吗?

为了详细说明,在下面的例子中,book属性可能被称为ABSTRACT,这是一个字符串,在DB中是VARCHAR(MAX)。它也可以有ID, AUTHOR和TITLE:

   public class vmTest
   {
   public Book MyBook { get; set; }
   }

如果我只希望访问ID和TITLE,那么如果我的理论是正确的,那么ABSTRACT列将不会加载到RAM中,因此不会导致性能问题。

提前感谢您的帮助

据我所知,当您请求MyBook时,将从数据库中加载所有整型和字符串。延迟加载只适用于被引用的实体。

这实际上是ViewModel的理想情况。创建ViewModel并仅用您需要的数据加载它。在controller中:

var toView = context.Books.Select(e => new YourViewModel { BookID = e.ID, Title = e.Title}).SingleOrDefault(vm => YourFilter(vm));
public class YourViewModel
{
    public int BookID { get; set;}
    public string Title { get; set;}
}

这样做,您只加载您需要的数据,因为select语句将在db中进行适当的投影。

相关内容

  • 没有找到相关文章

最新更新