Kalıcı mağazaya erişmek için ADO.NET kullanılan eski bir projem var. Şu anda, çok az sayıda kod çoğaltmasıyla birkaç DB sağlayıcısını desteklemek için bunu EF'ye (önemli ise 6.1.3) taşımak istiyorum.EntityFramework kullanarak veritabanındaki varlığın Hashtable özelliği nasıl ele alınır
Hashtable
özellik içeren bir işletme vardır: ADO.NET ile
public class Record
{
...
public Hashtable data { get; set; }
}
, BinaryFormatter
DAMLA bu data
özelliği dönüştürmek için kullanıldı ve tam tersi:
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);
}
Şimdi EF'e bu özelliği nasıl saklaması ve geri getirmesi gerektiğini söylemem gerekiyor.
public class Record
{
public byte[] dataRaw { get; set; }
[NotMapped]
public Hashtable data {
get {/*deserialize dataRaw */ }
set { /*Serialize to dataRaw*/}
}
}
Ama bu çözüm hataları eğilimli olduğunu ve o mülkle özel iş akışı takip edilmelidir: Ben varlıktaki bir daha mülkü depolayabilir
denedik ne var
.
Not; Aslında bu soru sadece Hashtable'la ilgili değil, özel bir şekilde saklanması ve geri alınması gereken her özel sınıfla ilgili değil.
dürüst bu mümkün olduğunu düşünmüyorum. Değerin bir sql ilkelinin içine ve dışına itilmesine izin verecek herhangi bir kanca olduğunu düşünmüyorum. Yakın gelebilecek herhangi bir cevap olup olmadığını görmek için bu soruyu merakla bekliyorum. – Jim
benzer bir soru var http://stackoverflow.com/questions/16135642/in-entity-framework-is-there-a-cleaner-way-of-converting-an-object-type-to-a-str, Seninki gibi bir destek alanı kullanıyor. Başka bir yol olduğunu düşünmüyorum. – Jim