1

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

因此,详细说明,在下面的示例中,书籍属性可能称为 ABSTRACT,它是一个字符串,在数据库中是 VARCHAR(MAX)。它还可能有 ID、AUTHOR 和 TITLE:

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

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

非常感谢您的帮助。

4

1 回答 1

2

据我所知,当您请求 MyBook 时,所有整数、字符串都会从数据库中加载。延迟加载仅适用于引用的实体。

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

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 中进行适当的投影。

于 2013-04-09T11:14:09.657 回答