J'ai un ancien projet qui utilisait ADO.NET pour accéder au stockage persistant. Actuellement, je veux le migrer vers EF (6.1.3, si c'est important), afin de supporter plusieurs fournisseurs de BD avec un minimum de duplication de code.Comment gérer la propriété Hashtable de l'entité dans la base de données en utilisant EntityFramework
Il y a une entité qui contient Hashtable
propriété:
public class Record
{
...
public Hashtable data { get; set; }
}
Avec ADO.NET, le BinaryFormatter
a été utilisé pour convertir cette propriété data
au blob, et vice versa:
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, data);
result = stream.GetBuffer();
}
//----------
using (MemoryStream serializationStream = new MemoryStream((byte[])value))
{
BinaryFormatter formatter = new BinaryFormatter();
result = (Hashtable)formatter.Deserialize(serializationStream);
}
Maintenant, je dois dire à EF comment stocker et récupérer cette propriété.
Qu'ai-je essayé
je pouvais stocker une plus propriété de l'entité:
public class Record
{
public byte[] dataRaw { get; set; }
[NotMapped]
public Hashtable data {
get {/*deserialize dataRaw */ }
set { /*Serialize to dataRaw*/}
}
}
Mais cette solution est sujette à des erreurs, et flux de travail spécial avec cette propriété doit être suivie.
P.S. En fait, cette question ne concerne pas uniquement Hashtable, mais toutes les classes personnalisées qui doivent être stockées et retrivées d'une manière spéciale.
Honnêtement, je ne pense pas que ce soit possible. Je ne pense pas qu'il y ait des hooks qui permettraient à la valeur d'être contrainte dans et hors d'une primitive sql. Je regarde attentivement cette question pour voir s'il y a des réponses qui se rapprochent. – Jim
il y a une question similaire http://stackoverflow.com/questions/16135642/in-entity-framework-is-there-a-cleaner-way-of-converting-an-object-type-to-a-str, il utilise un champ de support comme le vôtre. Je ne pense pas qu'il y ait un autre moyen. – Jim