2009-08-07 1 views
4

새로운 기능 NHibernate에 새로 추가 된 NHibernate의 구성 측면은 항상 나에게 지나치게 부담스러워 보였다. 어제, 나는 Fluent NHibernate의 Auto Mapping 기능을 보았고 적절하게 감명 받았다.Fluent NHibernate. Auto Mapping and Conventions

나는 스스로를 교육하기 위해 자동 매핑 및 규칙을 사용하여 'Getting First Project'(http://wiki.fluentnhibernate.org/show/GettingStartedFirstProject)를 시도하는 도전 과제를 설정했습니다. 나는 운이별로 없다는 것을 인정해야합니다.

내 단계를 summise하려면

내가 예에서 데이터베이스 스키마에 약간의 변경을 주로 외래 키에서 밑줄을 제거하기 위해 (즉, 제품 일련 PRODUCT_ID)이 등이 함께 더 많은 인라인을 가져다 줄 우리의 데이터베이스 명명 표준.

Q1) 예를 들어 ForeignKeyConvention를 사용하여 IHasManyConvention 구현을 작성하려고 시도했지만 WithKeyColumn 메서드가 존재하지 않는 것처럼 보입니다. (기사를 작성한 이후 디자인이 변경되어서 yesterdays 빌드를 다운로드했기 때문입니다.) 어떻게 수정합니까?

예에서 Entities 레이어를 약간 변경했는데 StoresStockedIn을 Stores (Product.cs)로 변경하고 Staff를 Employees (Store.cs)로 이름을 변경했습니다.

내 코드는 다음과 같습니다

var cfg = Fluently.Configure() 
.Database(MsSqlConfiguration.MsSql2005 
    .ConnectionString(c => c 
     .Is(connectionString))) 
.Mappings(m => m.AutoMappings.Add(
       AutoPersistenceModel.MapEntitiesFromAssemblyOf<Store>() 
        .Where(t => t 
         .Namespace == "FluentNHibernateTesting.Entities") 
         .ConventionDiscovery.Setup(c => c.Add<ForeignKeyConvention>()) 
       )) 
.BuildSessionFactory(); 

그때 시도하고 시작하기 예에 따라 데이터베이스에 저장, 제품 및 직원을 추가 할 수 있습니다. 예외가 나는 커밋에 일어나고 :

개체는 저장되지 않은 일시적인 인스턴스를 참조합니다 - 플러시하기 전에 임시 인스턴스를 저장합니다. 유형 : FluentNibernateTesting.Entities.Employee, Entity : FluentNibernateTesting.Entities.Employee

Q2)이 문제를 어떻게 해결할 수 있습니까? 필자는 (제한된 독서에서) 객체 관계의 캐스케이드 요소를 올바르게 설정하는 것과 관련이 있다고하지만, 자동 매핑을 사용하여 효과적으로이 문제를 해결하는 방법에 대해서는 다소 혼란 스럽습니다.

Q3) Fluent 프로젝트의 출시일이 있습니까? 나는 (내가 다른 많은 사람들처럼 생각하기에) 이것이 훌륭한 이니셔티브라고 생각하지만 그것이 안정된 상태에 있지 않는 한 그것을 사용하는 것을 염두에 둔다.

Q4) 많은 블로그에서 hbn.xml로 Fluent 기능의 패리티를 향해 꾸준히 노력하고 있다고 언급했습니다. 이 도구의 평가 및 사용을 돕기 위해 누락 된 기능 목록이 있습니까?

미리 감사드립니다.

답변

1

제임스 그레고리 (James Gregory)에게 직접 이메일로 동일한 질문을했습니다. 그는이 훌륭한 반응을 보냈습니다.

'안녕 폴,

1) KeyColumnNames가 필요하시면.

2) 3 가지 방법 중 하나를 수행 할 수 있습니다. IHasManyConvention를 설정하여 모든 관계를 전체적으로 계단식으로 만들거나 ForTypesThatDeriveFrom 호출 또는 자동 매핑 재정의를 사용하십시오.

3) 우리는 현재 1.0 릴리스에 대한 개인 테스트를 실시 중입니다. 공개 베타 버전을 출시할지 아니면 곧 출시할지 여부는 확실하지 않지만 앞으로 몇 주 내에 업데이트가 이루어집니다.

4) 우리가 NHibernate를 완벽하게 지원할 가능성은 거의 없다. 우리는 원하는 바가 없다. 뉴 햄프타 산의 많은 기능은 극도로 난해하며,이를 구현하는 데는별로 도움이되지 않습니다. 1.0부터 우리가 사람들이 정기적으로 사용하는 것을 지원하지 않는 기능은 거의 없을 것입니다. 나는 모든 일반적인 매핑 시나리오가 제공 될 것이라고 확신 할 수 있습니다. 그렇지 않은 경우 항상 hbm으로 되돌릴 수 있습니다.

제임스

감사 제임스)

이 문서는 1.0 철저하게 할 것입니다 우리의 문서가 최신 상태가 의견을 선점합니다.

0

Fluent 프로젝트의 출시일이 있습니까? 나는 (많은 사람들이 다른 사람들이 생각한 것처럼) 이것이 우수한 이니셔티브라고 생각하지만, 안정 상태가 아니면 사용을 염두에 둔다.

이제 SVN 저장소에서 Fluent nHibernate의 작동 버전을 가져올 수 있어야합니다. 그들은 또한 컴파일 된 바이너리를 가지고있다.

현재 Fluent NHibernate의 공식 릴리스가 존재하지 않습니다. 이것은 품질의 반영이 아니라 우리의 빠른 변화 속도입니다.우리의 코드베이스는 매일 업데이트되고있어 NHibernate Core와의 기능 패리티를 달성 할 때까지 공식 릴리즈에서 무의미한 노력을 기울입니다. 일상적으로 사용하는 대부분의 일반 기능이 준비되어 있습니다.

http://fluentnhibernate.org/downloads

현재 문제

현재 위치 : 그들 중

http://code.google.com/p/fluent-nhibernate/issues/list

없음 거래 킬러로 표시되지 않습니다. 실험하는 데 얼마나 시간이 걸리는지에 달려 있다고 생각합니다.

0

객체는 저장되지 않은 과도 인스턴스를 참조 - 세척하기 전에 transient 인스턴스 을 저장합니다. 유형 : FluentNHibernateTesting.Entities.Employee, 엔티티 : FluentNHibernateTesting.Entities.Employee

당신이 구글 객체가 저장되지 않은 transient 인스턴스을 참조하는 경우, 당신은이에 대한 몇 가지 일치하는 항목을 찾을 수 있습니다. 가장 좋은 방법은 이러한 문제를 해결하고 문제를 해결하는 것입니다. Anecdotally, 내가 읽은 것에서는 오류 메시지가 정확히 무엇을 말하는지, 업데이트되지 않는 많은 또는 많은 계단식 관계가 있음을 알 수 있습니다.