Pregunta

Sólo estoy tratando de averiguar si hay una forma sencilla de almacenar y recuperar archivos (datos binarios) utilizando Código EF primer CTP 5? Me gusta mucho utilizar el tipo de FILESTREAM, pero estoy realmente sólo en busca de alguna manera para hacer que funcione.

¿Fue útil?

Solución

No se puede utilizar FILESTREAM SQL en EF. EF se supone que funciona en la parte superior de los diferentes servidores de bases de datos, pero es característica FILESTREAM característica específica de SQL 2008 y posteriores. Usted puede tratar de hacerlo a la manera antigua -. varbinary(max) uso de la tabla de base de datos y el uso conjunto de bytes en su clase mapeada

Editar

pequeña aclaración - se puede utilizar FILESTREAM en la base de datos, pero EF no va a tomar ventaja de transmisión. Se carga como varbinary(max) estándar.

Otros consejos

I siempre crear otra clase como ProductImage con una asociación de uno a uno con el fin de gestionar la carga diferida y también para normalizar la tabla:

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

Sólo declarar su propiedad como byte [] como se ha mencionado Ladislav.

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

    public string Name { get; set; }

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

Eso es más o menos la misma. Si no se asigna la propiedad de la convención es que se asigna a un varbinary(max). Si usted tiene una columna de imagen en la base de datos ya sólo tiene que añadir [Column(TypeName = "image")] en la propiedad productImage o si lo prefiere asignación de código de añadir esto a su anulación OnModelCreating en la clase de contexto:

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

El problema que tengo con él es que no he encontrado una manera de hacer que la propiedad vago como yo no necesariamente quiero cargar datos binarios cada vez que voy a buscar un producto. Yo no estoy seguro, pero no recuerdo mal NHibernate puedo hacerlo fuera de la caja.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top