Подтвердить что ты не робот

Как хранить изображения с использованием кода Entity Framework First CTP 5?

Я просто пытаюсь выяснить, есть ли простой способ хранить и извлекать двоичные (файлы) данные, используя EF Code First CTP 5? Мне бы очень хотелось, чтобы он использовал тип FILESTREAM, но я действительно просто ищу способ сделать это.

4b9b3361

Ответ 1

Вы не можете использовать SQL FILESTREAM в EF. Предполагается, что EF работает на разных серверах баз данных, но функция фильтрации - особенность SQL 2008 и новее. Вы можете попробовать сделать это по-старому - используйте varbinary(max) в своей таблице базы данных и используйте массив байтов в вашем сопоставленном классе.

Edit:

Небольшое пояснение - вы можете использовать FILESTREAM в базе данных, но EF не будет использовать потоковое вещание. Он будет загружать его как стандартный varbinary(max).

Ответ 2

Я всегда создаю еще один класс типа ProductImage с ассоциацией "один к одному" для управления ленивой загрузкой, а также для нормализации таблицы:

public class ProductImage
{
    public int ProductId { get; private set; }
    public byte[] Image { get; set; }
}

Ответ 3

Просто объявите свою собственность как byte [], как отметил Ладислав.

public class Product
{
    public int Id { get; private set; }

    public string Name { get; set; }

    public byte[] ProductImage { get; set; }
}

Это в значительной степени. Если вы не сопоставляете свойство, то оно сопоставляется с varbinary(max). Если в базе данных уже есть столбец с изображениями, просто добавьте [Column(TypeName = "image")] в свойство ProductImage или, если вы предпочитаете сопоставление кода, добавьте это в свой переопределение OnModelCreating в классе контекста:

modelBuilder.Entity<Product>().Property(p => p.ProductImage).HasColumnType("image");

Проблема, с которой я сталкиваюсь, заключается в том, что я не нашел способ сделать свойство ленивым, поскольку я не обязательно хочу загружать двоичные данные каждый раз, когда я извлекаю продукт. Я не уверен, что правильно помню, но NHibernate может сделать это из коробки.