【发布时间】:2015-07-23 15:44:08
【问题描述】:
解决方案: 这个想法是加载问题来自表文件。所以为了让一切井井有条,我不得不关闭延迟加载,并从带有 blob 的实体加载导航属性,而不是相反。
public FileDto[] RetrieveFilesWithUserId(string id)
{
FileDto[] files;
logger.Info("Looking for files #{0}", id);
using (var db = ContextFactory.GetEntities())
{
db.Configuration.LazyLoadingEnabled = false;
logger.Debug("User retrieved !");
files = db.Files.Include("Users").Where(f => f.Users.Count(user1 => user1.Id == id) > 0).Select(
x =>
new FileDto
{
ContentType = x.ContentType,
Id = x.Id,
Name = x.Name,
Type = db.TypeFiles.FirstOrDefault(b => b.Id == x.Type).Description
}).ToArray();
db.Configuration.LazyLoadingEnabled = true;
}
logger.Info("done looking for files");
return files;
}
问题是: 我有一个看起来很经典的问题。 我有一个带有一个大 blob 的表,当我加载它时,我遇到了巨大的性能问题(由于加载了大量数据)。
我有用户,这些用户有文件,在我的文件实体中我有数据。 关系是多对多的。
简单修复:我做了一些表格拆分,我的所有问题都解决了。
问题:我的老板不希望我这样做(我认为这是最好的选择)。
那么,我该如何做不同的事情呢? 我考虑过直接要求,但我无权访问中间表(它们现在是导航属性。) 程序会成功吗?
【问题讨论】:
-
什么是大文件?
-
什么意思?各种文件、图片 pdf 等......它只是我想要(有时)避免加载的 varbinary(max) 字段(但我需要其他时间)
-
为什么不保留指向文件位置的指针,而不是将它们加载到数据库中?
-
不是一个选项,我需要将文件保存在我的数据库中
-
SQL 文件流应该用于存储文件,正是因为这个原因,blob 不好
标签: entity-framework entity-framework-6