【问题标题】:Alternatives to splitting tables Entity Framework 6 - VARBINARY(MAX)拆分表的替代方法 Entity Framework 6 - VARBINARY(MAX)
【发布时间】: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


【解决方案1】:

您可以使用投影来获取您想要的所有字段,而不需要 blob:

var people = context.People.Select(p => new PersonDTO { Id = p.Id, Name = p.Name });

PersonDTO 是这样的:

class ProductDTO
{
    public int Id { get; set; }
    public string Name { get; set; }
}

DTO 表示Data Transfer Object,通常用于此类任务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 2014-06-12
    相关资源
    最近更新 更多