2013-09-02 2 views
1

입력/출력 당 8 비트의 가능한 비트 관련 쿼리 (디지털 입력/출력) 때문에 비트 필드를 데이터베이스의 개별 필드로 유지합니다. 출력은 테이블 당 2 ~ 4 개의 입력/출력을 제공합니다. 필자는 입력/출력이있는 다른 테이블로 이러한 필드를 정규화하지 않았습니다. 데이터 저장 비율이 낮기 때문에 (예 : 2x 4B 키와 2-3B 데이터를 저장하는 더 나은 방법 중 하나)여러 비트 필드 (8 개 세트)를 데이터베이스에서 바이트로 변환

저는 db-first 방식을 사용하고 있으며, EF는 모든 비트 열에 대해 bool 속성을 생성했습니다. 현재 비트 시프트 및 부울 논리로 해당 필드를 읽고 있습니다. 내가 배열로 속성을 읽고 바이트를 얻기 위해 그들과 함께 비트 로직을 수행하고, 배열은 다음과 같습니다

bit[] bits = new bit[8] { DO_0, DO_1, ... , DO_7 };

나는이 같은 세터의 배열을 사용하여 속성을 설정하고 있습니다 :

Action<bool>[] bitSetters = new Action<bool>[8] { (x) => DO_0 = x, (x) => D0_1 = x, ...};

문제는 모델에서 얻은 모든 비트 열에 대한 속성 및 배열의 ​​값 배열을 만들어야한다는 것입니다. 다른 방법이 있습니까? 특히 EF의 일부 기능을 사용합니다.

+0

그래서 비트를 '바이트'로 변환 하시겠습니까? '00001111'에서'15'까지? –

+0

예,하지만 이것은 문제가 아닙니다. 문제는 동일한 코드를 너무 많이 복사하지 않고 여러 bool 속성을 연결하여 여러 세트의 bool을 연결하는 좋은 방법입니다. 또는 EF를 사용하여 bool 대신 바이트를 표시합니다. –

답변

0

나는 복잡한 방식으로 그것을 만드는 방법을 알아 냈습니다. 8 개의 부울 속성과 추가 바이트 속성을 사용하여 새로운 복잡한 유형을 생성했습니다.