Единственный способ получить отдельную загрузку - это переместить данные в отдельную сущность со взаимно-однозначным отношением.
Хотя это не обязательно должна быть отдельная таблица.Хотя наиболее естественный выбор выглядит как принадлежащий объекту , так как принадлежащие объекты всегда загружаются владельцами, он должен быть обычным объектом, но настроен на разбиение таблицы - в простых словах, поделитесь этой же таблицей с главной сущностью.
Примените ее к вашему образцу:
Модель:
public class SomeModel
{
public string Id { get; set; }
public string OtherProperty { get; set; }
public SomeModelBlob Blob { get; set; }
};
public class SomeModelBlob
{
public string Id { get; set; }
public byte[] Data { get; set; }
}
Конфигурация:
modelBuilder.Entity<SomeModelBlob>(builder =>
{
builder.HasOne<SomeModel>().WithOne(e => e.Blob)
.HasForeignKey<SomeModelBlob>(e => e.Id);
builder.Property(e => e.Data).HasColumnName("Blob");
builder.ToTable(modelBuilder.Entity<SomeModel>().Metadata.Relational().TableName);
});
Использование:
Код:
var test = context.Set<SomeModel>().ToList();
SQL:
SELECT [s].[Id], [s].[OtherProperty]
FROM [SomeModel] AS [s]
Код:
var test = context.Set<SomeModel>().Include(e => e.Blob).ToList();
SQL:
SELECT [e].[Id], [e].[OtherProperty], [e].[Id], [e].[Blob]
FROM [SomeModel] AS [e]
(второй e.Id
в select
выглядит странно, но я думаю, мы можем жить с этим)