2009-06-21 5 views
3

새 프로젝트에서 DDD을 사용하고 클래스를 모델링 한 다음 클래스 라이브러리를 기반으로 데이터베이스 스키마를 생성하고 싶습니다. 내 계획은 NHibernate hbm2ddl 도구 SchemaExport으로 이것을 수행하는 것이다.NHibernate SchemaExport and Configure() catch-22

문제는 내가 SchemaExport 때문에 그것이 나를두고 이상한 캐치-22 문제 동작하지 않습니다 수 있다는 것입니다. SchemaExport는 세트뿐만 아니라 그 자체가 유효한 NHibernate에 구성 파일을 필요로하는 Configuration 객체를 필요 데이터베이스 맵핑.

캐치-22 여기에 내가 구성은()가 "Could not determine the name of the table for entity 'MyEntity'; remove the 'table' attribute or assign a value to it."을 불평 할 때 SchemaExport가 그것이 내가 만들 수 Configuration을 기반으로 만든하도록되어있는 동안 그래서 Configure() 방법은 존재하는 테이블을 필요로한다는 것이다 테이블이 존재하지 않기 때문입니다.

그래서,이 땅에서 나는 Configure() 던져없이 유효한 NHibernate에 ConfigurationSchemaExport 실제로 유용한 일을하는 데 필요한 매핑을 포함하는 생성하고 SchemaExport으로 작성되는 테이블을 찾을 수 없다는 불평을 하죠 방법 ? 거기에 Configuration 개체를 설정할 수있는 "모드"가있어 주어진 테이블의 존재 여부를 데이터베이스에서 확인하지 않거나 내가해야 할 일이 있습니까?

답변

9

구성 파일을 게시 할 수 있습니까?

나는 테이블이없는이 방법을 항상 사용하며, 즉시 스키마를 생성 할 수 있습니다. 내 생각 엔 당신이 .hbm 파일 중 하나에서 뭔가를 가지고있을 수 있습니다. 스키마를 1 개의 테이블로 잘라서 작동 시키십시오. 그런 다음 그 테이블에서 구성하십시오. 당신은 SQL은 DB에 생성되는 것을 볼 수 있도록 이것은 또한 당신을 위해 콘솔에 스크립트를 밀어 버린다

var cfg = new Configuration(); 
    cfg.Configure(); 
    var schema = new SchemaExport(cfg); 
    schema.Create(true, true); 

: 참고로, 여기에 내가이 DB 스키마를 생성하는 데 사용하는 코드입니다.

+2

팁 주셔서 감사합니다. HBM을 직접 작성하지는 않지만 Fluent NHibernate에 의해 동적으로 생성되도록하기 때문에 결과 HBM의 'table'속성을 'GetTableName'규칙으로 설정하는 데 오류가 있다는 것을 알지 못했습니다. 빈 문자열 생성 된 HBM 파일을 손에 넣으면 문제가 매우 명확 해졌으며 몇 초 내에 수정할 수있었습니다. 예! :) –