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에 그 속성을 저장하고 가져 오는 방법을 EF에 알려야합니다.
public class Record
{
public byte[] dataRaw { get; set; }
[NotMapped]
public Hashtable data {
get {/*deserialize dataRaw */ }
set { /*Serialize to dataRaw*/}
}
}
그러나이 솔루션은 오류를하는 경향이, 그 속성을 특정 워크 플로가 따라야합니다 : 내가 엔티티에 또 하나 개의 속성을 저장할 수
노력이 무엇
.
P. 사실이 질문은 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