2012-04-19 32 views
8

我正在开发一个文件存储应用程序,我们已经在我们的数据库中引入了FileStream类型。系统预计支持大文件。应用程序的一部分允许批量上传多个文档。这些文件必须与系统内的其他实体连接。如何防止实体框架将FileStream列加载到字节数组中?

一个页面旨在显示未链接的文档,以允许用户将文档逐个链接到实体。在对上传过程进行了一些负载测试之后,我们发现加载此Unlinked Documents页面时,ASP.NET工作进程的内存占用量超过了GB。

经过调查,似乎Entity Framework正在为数百个未链接的文档加载整个文档行实体(包括FileStream,转换为字节数组)。在我的存储库类中,当转换为模型时,我不保存这个字节数组,但到那时为时已晚。 EF花费时间和内存将字节数组分配到Repository类表示中。

有没有一种方法可以告诉EF不加载这个字节数组,除非我明确要求它?

+1

http://stackoverflow.com/a/3293286/782754是不可能标记为延迟加载的属性,但可以使用其他概念 – 2012-04-19 21:25:43

回答

11

Garrison, 如果将两个相关实体映射到单个表格,则可以使用名为“实体分割”的功能。因此,在第一个实体中,除了文件流属性外,您将拥有所有的实体。在第二个实体中,您将拥有主键(与第一个实体中的相同)和filestream属性。在模型中的实体之间创建一对一关系,然后将两个实体映射到同一个表。现在,文件流的实体是相关的,您可以根据需要加载或延迟加载它。唯一的缺点是它不是主要实体的属性,所以您必须导航到相关的实体,然后导航到属性。

myEntity.MyRelatedEntity.TheFileStreamProperty

下面是一个old blog post我写了如何在EDM设计器来完成。

您也可以使用Code FIrst实现相同的映射。这是我写的一篇MSDN文章,其中包含一篇实体分裂文章。 http://msdn.microsoft.com/en-us/data/hh272551

HTH 朱莉

+0

谢谢你,朱莉。这正是我一直在寻找的! – 2012-04-20 13:16:38

+0

很好听! :) – 2012-04-21 00:35:50

相关问题