[SQL] NHibernate에 동적 열 번호
SQLNHibernate에 동적 열 번호
내 C # 프로젝트에서 나는 동적 열 번호를 하나 개의 테이블로 코드를 하나의 데이터베이스에 만들 필요가있다. 이처럼
------------------------------------------------------------------------------
| Time ¦ Element #1 | Element#2 ¦ ... ¦ Element#N ¦
------------------------------------------------------------------------------
¦ TimeValue#1 ¦ Element#1Value#1 ¦ Element#2Value#1 ¦ ... ¦ Element#NValue#1 ¦
¦ TimeValue#2 ¦ Element#1Value#2 ¦ Element#2Value#2 ¦ ... ¦ Element#NValue#2 ¦
...
¦ TimeValue#M ¦ Element#1Value#M ¦ Element#2Value#M ¦ ... ¦ Element#NValue#M ¦
------------------------------------------------------------------------------
나는 간단한 SQL 쿼리 'SQL은 테이블 만들기'를 사용
public void AddTable(string TableName, Dictionary<string,Type> columns)
{
...
string query = @"CREATE TABLE " + TableName + "(";
foreach (var c in columns)
{
SqlParameter temp = new SqlParameter();
string t = SetSQLType(ref temp, c.Value).ToString();
query += c.Key + " " + (t == SqlDbType.NVarChar.ToString() ? (t + "(200)") : (t)) + ",";
}
query = query.Substring(0, query.Length - 1);
query += " )";
...
}
그러나 나는 어쩌면, 내가 예를 들어,이 더 편안 ORM을 사용할 수 있습니다, 생각 - NHibernate에 있습니다. 내가 할 수 있습니까? 나는 매핑 별 코드 및 동적 구성 요소에 대해 읽어,하지만 난 정확히 내가 내 경우 무엇을해야하는지, 확실하지 않다.
나는이 같은 뭔가가 필요, 생각 :
public class Elements
{
public virtual DateTime Timestamp { get; set; }
public virtual IEnumerable<double> Values { get; set; }
}
나는이 클래스를 매핑 할 수 있습니까?
해결법
-
==============================
1.이 항목은 흥미 롭다. 그리고 어쩌면 그래서 첫번째보기에서 삭제하지. 개요로 내 대답은 아래 나열된 모든 소스의 요약을 가져 가라. 그리고 어쩌면 그것은 당신에게 해답을 줄 것이다.
이 항목은 흥미 롭다. 그리고 어쩌면 그래서 첫번째보기에서 삭제하지. 개요로 내 대답은 아래 나열된 모든 소스의 요약을 가져 가라. 그리고 어쩌면 그것은 당신에게 해답을 줄 것이다.
뷰의 C #을 관점에서,이 방법이 동적 특성에 대해 생각할 수
public virtual IDictionary<keyType, valueType> Additional { get; set; } // (e.g. <string, object> public virtual IDictionary Additional { get; set; }
이 두 가지 동적입니다. IDictionary 처리에 대한 컴파일 시간 검사가 없습니다. 더 나은 상황이 IDictinary 확인 일반 인수는 <,>. 우리가 동적 매핑에 대해 이야기하고 있기 때문에, 컴파일 시간 체크는 우리가 희생 할 수있는 것입니다 ...
다른 매핑을하고 테이블의 다른 구조를 가지고 우리가 (대부분의 경우)에있는이 사전 중 하나에 데이터를로드합니다. 일반 행에 포함 된 데이터의 transpostion 편리 할 것이다. 비 일반은 (질문의 예로서) 열 매핑에 사용 할 수있다. 하자 모두 논의
와하자의 시작은 더 안전 시나리오를 입력합니다. 질문에 다음 터치 솔루션 닫기
예를 들어, 자신의 역할 / 유형에 따라 일부 엔티티 (예를 들어 계약)에 몇 사람을지도 할 수 있습니다. 1) 관리자 2) 리더 3) 시험기. 우리는 종류 / 역할 (하나의 시험기 또는 없음) 당 한 사람이있을 수 있다는 것을 알고 있다면, 우리는 그것을로 설명 할 수 있습니다 :
public virtual IDictionary<PersonType, Person> Persons { get; set; }
우리는 지금 동적입니다. 이 0 수 계약에 관한 1 1+ 사람. 그들 각각은 PersonType에 의해 고유해야합니다. 그리고 우리는 또한 런타임에 새 PersonTypes을 소개하고 계약의 관련 담당자 세트를 확장 할 수 있습니다 ...
매핑은 다음과 같이해야한다
<map name="Persons" table="ContractPerson" > <key column="ContractId"/> <index-many-to-many column="PersonTypeId" class="PersonType"/> <one-to-many class="Person"/> </map>
이것은 6.9의 예입니다. 삼항 협회. 이 관련된 세 기관이 있고, 우리는 여전히 런타임에 유연성을해야합니까. 이미 말했듯이, 우리는 새로운 PersonTypes를 삽입하고이 계약-사람의 관계를 수정할 수 있습니다.
(IDictiniary <문자열, 개체>와 비교하여)이 시나리오는 여전히 컴파일시 검사의 많은을 제공합니다.
우리가 행의 관점에서 동적 <지도>를 사용하고 싶습니다 경우 시나리오에서는 위의 설명 - 우리는이 같은 테이블이 필요합니다 :
ElemntId| TheKey | TheValue (e.g. nvarchar) 1 | "name" | "Element A" 1 | "time" | "20:02" 1 | "date" | "2013-05-22" 1 | "value" | "11.22"
C #은 다음과 같이 보일 것이다
public class Elements { ... public virtual IDictionary<string, string> Values { get; set; } }
매핑 :
<map name="Values" table="DynamicElementValues" > <key column="ElementId"/> <index column="TheKey" type="string"/> <element column="TheValue" type="string"/> </map>
우리가 IDictionary를 사용했기 때문에 <문자열, 문자열> 모든 값은 문자열입니다. 우리는 제대로 그 가치를 해석하는 일부 메타 데이터를 필요
우리는 얻은 :
우리는 손실 :
이번에는 우리가 정말 열을 통해 동적 솔루션을하려고합니다.
NHibernate에 기능, 우리는 여기에 사용할 수 있습니다 :
매핑의이 종류는 우리의 요구 사항에 매우 가까운 질문이다. 우리는 C #을 표현을해야합니다
public class Elements { ... public virtual IDictionary DynamicValues { get; set; } }
그리고 이것은 매핑 될 수있다 :
<join table="ElemntValues" > <key column="ElementId" /> <dynamic-component name="DynamicValues" > <property name="Time" type="TimeSpan" /> <property name="Date" type="DateTime" /> <property name="Salary" type="decimal" /> <property name="Color" type="string" /> <property name="WorkingDays" type="integer" /> <many-to one.... ... </dynamic-component> </join>
이 경우, 우리는 (그 <클래스> 매핑의 일환으로) 우리의 부모 개체에 조인 된 테이블의 ElementValues을 separted했다 않습니다.
이것은 유일한 매핑되지 않습니다. 예를 들어, 다른 맵핑 유형이있을 수 있습니다 4.4. 동적 모델
<class entity-name="DynamicValues"...
다음은 좀 더 특별한 처리를 필요로 (삽입, 업데이트, 삭제)
물건을 많이 단순화 것이다 가입하지만, 항상 SQL 문에 사용됩니다 (단 부모의 핵심 특성이 요구되는 경우에도)
그것은 동적인가?
그럼 우리가 얻은 :
우리는 손실 :
그럼,이 문서에 적혀있다? 7.5. 동적 구성 요소 :
...는 DOM 파서를 사용하여. 솔직히 말해서, 나는 평균 것을 어떻게 구현 해야할지 모르겠어.
또한 아담 바에서 매핑별로 코드 - 동적 요소 (주석 참조) 언급
NHibernate에의 동적 매핑 (일부 추출물 너무 복잡 살펴) - 그러나 FIRO에서 좋은 아이디어가있다. 정말 필요한 경우, 이것은 실제 역동적 인 세계에 솔루션 ... 런타임에 새 열 ... IDictionary에 매핑하는 새 키가 될 수
은 <지도> 매핑을 우리는 매우 역동적이 될 수 있습니다. 런타임에서 다른 키와 값. 재배치 필요가 없습니다. 그러나 우리는하여 선택하거나 순서대로 동적 속성을 사용할 수 없습니다. 이들 값을 기준으로 필터 어렵다
은 <동적 성분>로 우리는 (박스)의 개 맵핑에 의존한다. 그러나 우리는 할 컬럼에서 우리의 데이터를 따라서 우리가 사용할 수를 검색 할 수 합류했다. 쉬운 정렬, 필터링합니다. 그리고 /하지만 우리가 할 무엇을 우리가 무엇을 할 수 있는지 우리를 안내하는 몇 가지 메타 데이터가 있어야합니다.
from https://stackoverflow.com/questions/16688102/nhibernate-dynamic-columns-number by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 페이지로드의 쿼리를 삽입, 두 번 삽입? (0) | 2020.04.16 |
---|---|
[SQL] 왜 SQL 쿼리의 결과는 내가 예상 한 순서대로 돌아 오지 않는다? (0) | 2020.04.16 |
[SQL] 어떻게 MySQL의 데이터를 생성하는? (0) | 2020.04.16 |
[SQL] "운영자가 존재하지 않습니다 : 정수 =?" 포스트 그레스를 사용하는 경우 (0) | 2020.04.16 |
[SQL] 60000000 개 항목, 특정 월에서 항목을 선택합니다. 어떻게 데이터베이스를 최적화? (0) | 2020.04.16 |