0

我们用相当大的数据库开发后台应用程序。将所有内容从数据库加载到内存是不合理的,因此当请求模型的属性时,我们从数据库(通过 EF)读取但我们的许多 UI 只是简单的实体列表,其中包含一些(!)属性呈现给用户。例如,我们只想显示 Id、Title 和 Name。稍后当用户选择项目并想要执行某些操作时,需要整个对象。现在我们有了存储在内存中的项目列表。某些属性包含大文本、图像或其他数据。EF 与实体一起工作,读取一堆大对象会显着降低性能。

据我了解,可以通过创建轻量级实体并在适当的上下文中使用它们来解决问题。

第一的。恐怕每个视图都会让我们创建新的 LightweightEntity,我们最终会以臃肿的对象上下文结束。

第二。由于模型包装了 EF,我们需要为各种实体提供方法。

第三。ViewModel 相互通信和传递实体。

所以我坚持所有这些考虑,需要好的建筑设计建议。有任何想法吗?

4

1 回答 1

1

对于大文本的图像,您可以考虑表格拆分,这通常用于将表格拆分为轻量级实体和“重”实体。

但我认为你所说的轻量级“实体”是数据传输对象(DTO)。这些不是由上下文提供的(因此它不会变得臃肿),而是由实体的投影提供,这是在存储库或服务中完成的。

对于投影,您可以使用AutoMapper ,尤其是我在这里描述的它的新功能。这使您可以减少需要为“各种实体”(DTO)提供的方法的数量,因为可以在泛型类型参数中给出要投影的类型。

于 2012-08-03T18:09:36.863 回答