永続ストアにアクセスするためにADO.NETを使用した古いプロジェクトがあります。現在、最小のコード複製でいくつかのDBプロバイダをサポートするために、それをEF(6.1.3、重要であれば)に移行したいと考えています。EntityFrameworkを使用してデータベースのエンティティのHashtableプロパティを処理する方法
Hashtable
プロパティ含むエンティティ、あります:ADO.NETで
public class Record
{
...
public Hashtable data { get; set; }
}
は、BinaryFormatter
はBLOBにこのdata
プロパティを変換するために使用された、およびその逆:
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);
}
今私はEFにそのプロパティをどのように格納して取得するべきかを伝える必要があります。
public class Record
{
public byte[] dataRaw { get; set; }
[NotMapped]
public Hashtable data {
get {/*deserialize dataRaw */ }
set { /*Serialize to dataRaw*/}
}
}
しかし、この解決策は、エラーを起こしやすい、とそのプロパティを持つ特殊なワークフローが続いている必要があります。私は、エンティティに1つのより多くのプロパティを格納することができ
を試してみましたが、何
P.S.実際には、この質問はHashtableについてではなく、特別な方法で格納して取得する必要があるすべてのカスタムクラスについてです。
私は正直これが可能であるとは思いません。私は値がSQLプリミティブの内外に強制的に入ることを許すフックはないと思う。私は熱心にこの質問を見て、近い答えがあるかどうかを見ています。 – Jim
似たような質問がありますhttp://stackoverflow.com/questions/16135642/in-entity-framework-is-there-a-cleaner-way-of-converting-an-object-type-to-a-str、それはあなたのようなバッキングフィールドを使用します。私は別の方法があるとは思わない。 – Jim