2009-05-05 6 views
8

1 차 키/참조가없는 데이터베이스 테이블에 대한 매핑을 생성하려고합니다.1 차 키가없는 Fluent-NHibernate 테이블 매핑

public class TestMap : ClassMap<<Test>Test> { 

    public TestMap() { 

     WithTable("TestTable"); 

     Map(x => x.TestColumn); 

    } 

} 

이것은 실패하거나 예상 ID 또는 복합 ID입니다. 유창한 nhibernate에서 가능합니까?

+0

'표시되지 않은'기본 키가 있습니까? 즉, 일부 필드 모음이 기본 키를 만들지 만 테이블에 기본 키가 정의되어 있지 않습니까? –

답변

2

아니요.이 테이블을 매핑하려면 SQL Server의 ID 열과 같은 대리 키를 추가해야합니다. 내가 아는 한, 이것은 NHibernate 자체에 의해 지원되지 않는다.

왜이 테이블에 기본 키가 없습니까?

+5

나는이 질문에 대한 답변을 원합니다. 때때로 (사실 대부분의 경우) 우리는 그린 필드 시나리오에서 일하지 않습니다. 우리는 수정 될 수없는 기존 db 스키마 위에 새로운 유창한 NHibernate DAL을 대신 배치하고 있습니다. ID 컬럼이없는 테이블과 잘 정의 된 키가 있습니다. 우리가이 스키마를 변경할 수 있다면, 우리는 하겠지만 데이터베이스 스키마를 변경하지 말아야한다는 요구가 있습니다. –

4

오라클의 경우 적어도 "ROWID"를 사용했습니다. mssql의 경우 테이블에 대한 읽기 전용 액세스를 위해 "ROW_NUMBER()"내장 함수를 사용할 수 있지만 그 중 하나를 시도하지는 않았습니다 ...

+0

영광스러운 작은 해킹. 그냥 ID 열을 ROWID 매핑 및 NHibernate 어떤 문제가있는 것 같지 않습니다. 감사! – rie819

0

이 기능은 알고있는 한 nhibernate에서 지원하지 않습니다. 그러나 일반적으로 엄밀히 말하자면, 항상 ID의 종류가 있어야하며, ID가 필요 없다고 판단되는 상황에 처하면 데이터 모델을 평가해야합니다. 테이블 고유 기본 키이든 다른 테이블의 대리 키이든 ID가 존재해야합니다. 이것은 nhibernate가 테이블을 처리 할 수있을뿐만 아니라 인덱싱을 통해 성능을 향상시킵니다.

nhibernate가 필요를 충족시키지 못한다고 가정하기 전에 테이블에 키가없는 이유와 그것이없는 느낌을 고려하십시오.

0

우리는 기본 키/신원 coulmn가없는 테이블에서 열을 가져올 수 있다면, 우리는 아래로 유창하게 사용할 수 있습니다 테이블이 다른 기업에 속하는 데이터를 포함

Id(x => x.TempID).Column("TempID"); 
0

경우, 당신이 그것을 매핑 할 수 있습니다 구성 요소는입니다. 구성 요소는 자체적으로 식별되지 않지만 다른 엔터티에 속합니다. 입니다.

0

데이터베이스에 정의 된 키가없는 테이블에 엔티티를 매핑 할 수 있습니다. 레거시 SQL Server 데이터베이스에서 그렇게합니다. 그러나 표에는 후보 키 (실제로 고유 한 값 조합을 저장하는 일부 열 집합)이 있어야합니다. 엔티티의 개념은 일종의 ID의 개념을 포함합니다. 대신에 코드에서 시도하는 것은 신원이없는 엔티티를 매핑하는 것이고 가능하지는 않습니다.

관련 문제