Estoy tratando de averiguar si hay una manera simple de almacenar y recuperar datos binarios (archivos) usando EF Code First CTP 5? Realmente me gustaría usar el tipo FILESTREAM, pero realmente solo estoy buscando la forma de hacerlo funcionar.Cómo almacenar imágenes utilizando Entity Framework Code First CTP 5?
Respuesta
No puede usar SQL FILESTREAM
en EF. Se supone que EF debe funcionar sobre diferentes servidores de bases de datos, pero la característica filestream es una característica específica de SQL 2008 y posteriores. Puede intentar hacerlo a la antigua usanza: use varbinary(max)
en su tabla de base de datos y use la matriz 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 la transmisión. Lo cargará como estándar varbinary(max)
.
Simplemente declare su propiedad como byte [] como mencionó 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. Si no mapea la propiedad, la convención se mapea a 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 agregar 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 sea floja ya que no necesariamente quiero cargar datos binarios cada vez que obtengo un producto. No estoy seguro de recordar correctamente, pero NHibernate puede hacerlo de la caja.
siempre puedo crear otra clase como ProductImage
con una asociación 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; }
}
Vi un gran aumento de rendimiento con esta técnica. – jsturtevant
¿No sería mucho más simple crear una vista que no incluye la columna de imagen de archivo y luego crear una segunda entidad en EF que apunte a la vista en lugar de a la tabla, digamos, p. "ProductLite" –
@ C.List No puedo creer que haya usado EF durante años y nunca pensé en hacer eso. Es una idea fabulosa y la utilicé para deshacerme de una visión innecesaria que estaba usando para hacer lo mismo. Vamos a llamarlo una "entidad virtual" :) –
- 1. ¿Cómo se realizan las relaciones en Entity Framework 4 Code-First CTP 5?
- 2. Implementar Entity Framework Code First
- 3. Uso de enumeraciones con Code First y Entity Framework 5
- 4. EF Code First CTP 5 y SQL SErver 2008 R2
- 5. Entity Framework - Code First Fluent API: ErrorMessage?
- 6. Entity Framework Code First y Multiple Assemblies
- 7. Entity Framework Code First MySql Pluralizing Tables
- 8. MembershipUser y Entity Framework Code First
- 9. Almacenar archivo en SQL CE 4 utilizando Entity Framework Code-First approach
- 10. Entity Framework Code First y Database First Bug/Conflicto
- 11. Usando MySql con Entity Framework 4 y Code-First Development CTP
- 12. Code First Entity Framework 4: error con la autenticación SQL
- 13. ¿Cómo separe los objetos en Entity Framework Code First?
- 14. Entity Framework Code First y Criterios de búsqueda
- 15. Entity Framework CTP 5 - Patrón de depósito - haciendo actualizaciones
- 16. Code-First Entity Framework insertando datos con ID personalizado
- 17. Code First Entity Framework - cambio cadena de conexión
- 18. Tipo SQL 'hora' en Entity Framework Code First
- 19. ASP.NET MVC3 y Entity Framework Code first architecture
- 20. ¿Puedo deshabilitar las relaciones automáticas en Entity Framework Code First?
- 21. Entity Framework - Code First no carga el objeto referenciado
- 22. Filtro con múltiples clases derivadas con Code-first Entity Framework
- 23. Extraña actualización de entidad en Entity Framework Code-First
- 24. Ventajas y desventajas de Entity Framework 4 Code-First
- 25. Entity Framework Code First y colecciones de tipos primitivos
- 26. Cascade Delete, misma tabla, Entity Framework 4 Code First
- 27. Entity Framework Code First - Definición de relaciones/claves
- 28. Entity Framework Code First CTP4 Default Column Values?
- 29. Entity Framework Code First no genera base de datos
- 30. Entity Framework Code-First: defina la clave para este EntityType
Sí, NHibernate puede hacer la columna específica perezoso de carga fuera de la caja: http://ayende.com/blog/4377/nhibernate-new-feature-lazy-properties. – gabe