J'essaie de savoir s'il existe un moyen simple de stocker et d'extraire des données binaires (fichiers) avec EF Code First CTP 5 ? J'aimerais vraiment qu'il utilise le type FILESTREAM, mais je cherche simplement un moyen de le faire fonctionner.
Réponses
Trop de publicités?Il suffit de déclarer votre propriété comme byte[] comme Ladislav l'a mentionné.
public class Product
{
public int Id { get; private set; }
public string Name { get; set; }
public byte[] ProductImage { get; set; }
}
C'est à peu près tout. Si vous ne mappez pas la propriété, la convention veut qu'elle soit mappée à un fichier varbinary(max)
. Si vous avez déjà une colonne image dans la base de données, ajoutez simplement [Column(TypeName = "image")]
sur la propriété ProductImage ou, si vous préférez le mappage de code, ajoutez-le à votre surcharge OnModelCreating dans la classe de contexte :
modelBuilder.Entity<Product>().Property(p => p.ProductImage).HasColumnType("image");
Le problème que j'ai est que je n'ai pas trouvé le moyen de rendre la propriété paresseuse car je ne veux pas nécessairement charger des données binaires à chaque fois que je vais chercher un produit. Je ne suis pas sûr de me souvenir correctement, mais NHibernate peut le faire d'emblée.
Vous ne pouvez pas utiliser SQL FILESTREAM
dans EF. EF est censé fonctionner sur différents serveurs de bases de données, mais la fonctionnalité de filtrage est une fonctionnalité spécifique de SQL 2008 et des versions plus récentes. Vous pouvez essayer de le faire à l'ancienne - utiliser varbinary(max)
dans votre table de base de données et utiliser le tableau d'octets dans votre classe mappée.
Edit :
Petite précision - vous pouvez utiliser FILESTREAM
dans la base de données, mais EF ne tirera pas parti du streaming. Il le chargera de manière standard varbinary(max)
.