Vous ne pouvez pas utiliser SQL FILESTREAM
dans EF. EF est censé fonctionner sur différents serveurs de base de données, mais la fonction filestream est une caractéristique spécifique de SQL 2008 et plus récent. Vous pouvez essayer de le faire à l'ancienne - utilisezvarbinary(max)
dans votre table de base de données et utilisez un tableau d'octets dans votre classe mappée.
Éditer:
Petite clarification - vous pouvez utiliser FILESTREAM
dans la base de données mais EF ne profitera pas du streaming. Il le chargera en standard varbinary(max)
.
Déclarez simplement votre propriété en octet [] 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 est qu'elle correspond à un
varbinary(max)
. Si vous avez déjà une colonne d'image dans la base de données, ajoutez simplement[Column(TypeName = "image")]
la propriété ProductImage ou si vous préférez le mappage de code, ajoutez ceci à votre remplacement OnModelCreating dans la classe de contexte:Le problème que j'ai avec cela est que je n'ai pas trouvé de moyen de rendre la propriété paresseuse car je ne veux pas nécessairement charger des données binaires chaque fois que je récupère un produit. Je ne suis pas sûr de me souvenir correctement, mais NHibernate peut le faire hors de la boîte.
la source