Хранение двоичных данных с метаданными - PullRequest
4 голосов
/ 07 декабря 2011

Использование кода Entity Framework 4.2 Во-первых, мы хотим сохранить некоторые данные изображения в нашей базе данных.Изображения являются небольшими и кэшируются на диск всякий раз, когда мы можем.

Однако нам часто требуются некоторые метаданные, сохраненные вместе с изображением (например, это тип MIME), но не фактические данные изображения.1004 *

В частности, мы хотим, чтобы фактическое Bytes изображения было только в очень редких случаях, и, следовательно, не хотим, чтобы оно загружалось, пока мы не запросим его.Bytes когда вам нужны Image объекты?

1 Ответ

6 голосов
/ 07 декабря 2011

Я рекомендую вам создать отдельную сущность (например, ImageBytes с Id и байтами) специально для поля, содержащего байты, и связать его с сущностью Image (которая имеет Id и MimeType).Вы можете использовать функцию под названием Table Splitting (в EDMX и в CODE First), где вы можете отобразить несколько объектов в одну таблицу базы данных.Затем вы можете запросить изображения объектов, и EF выберет только необходимые столбцы из базы данных.Вы можете получить доступ к байтам через отношения, которые вы определяете между Image и ImageBytes.Затем вы можете выполнить либо загрузку, либо ленивую загрузку, либо явную загрузку для получения байтов изображения.

Если вы используете аннотации данных, все, что вам нужно сделать, это указать таблицу для обеих сущностей:

[Table("Image")]
public class Image
{}

[Table("Image")]
public class ImageBytes
{}

С беглым API

modelBuilder.Entity<Image>()
            .HasRequired(e => e.Bytes)
            .WithRequiredPrincipal();

modelBuilder.Entity<Image>().ToTable("Image");
modelBuilder.Entity<ImageBytes>().ToTable("Image");

Джут Джули

...