2014-04-23 3 views
0

이 하나가 내 머리를 찢어 버렸다. 나는 Fluent NHibernate에서 자동 매핑 기능을 사용하고 있지만 선택적으로 무시하지만 다른 일부는 잘 구현 한 것처럼 보입니다.자동 매핑을 무시하는 유창한 NHibernate 무시

작동하지 :

public class CupTree 
    { 
    public virtual int Id { get; set; } 
    public virtual int TournamentId { get; set; } 
    public virtual int CurrentRound { get; set; } 
    public virtual IList<CupRound> Rounds { get; set; } 
    } 

작동하지 오버라이드 :

public class CupTreeOverride : IAutoMappingOverride<CupTree> 
    { 
    public void Override(FluentNHibernate.Automapping.AutoMapping<CupTree> mapping) 
    { 
     mapping.HasMany(x => x.Rounds).Cascade.All(); 
    } 
    } 

스키마 생성 :

public void GenerateSchema() 
    { 
     var config = new MappingConfiguration(); 

     Fluently.Configure() 
      .Database(MsSqlConfiguration.MsSql2008.ConnectionString(/*my conn str*/)) 
     .Mappings(m => m.AutoMappings.Add(
      AutoMap.AssemblyOf<CupTree>(config) 
      .Conventions.Add(
       DefaultLazy.Never(), 
       Table.Is(x => x.EntityType.Name + "s")) 
      .UseOverridesFromAssembly(Assembly.GetAssembly(typeof(CupTreeOverride))) 
      )) 
     .ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true)) 
     .BuildSessionFactory(); 
    } 

을 따라서는 CupTree 테이블을 작성하는 동안 그것은 CupRounds 표를 작성하지 않습니다 조금도. 그러나 PreMatchTeamInfo 테이블과 모든 하위 테이블을 생성합니다. 나는 분명히 무언가 어리석은 일을하고 있지만 그것을 발견 할 수는없는 것 같습니다. 어떤 도움이라도 대단히 감사합니다.

+0

P.S 표명과 KeyColumn을 모두 명시 적으로 지정해 봤습니다. 차이점이 없습니다. – BlackSpy

+0

추가 업데이트 - .hbm.xml 파일을 내보낼 수 있으며 출력해야하는 항목 (올바른 키 열 등을 사용하여 일대 다)에 따라 데이터베이스 테이블이 다음과 같이 지정되지 않았습니다. .hbm.xml 파일 – BlackSpy

답변

1

나는 이것을 열 이름까지 추적 관리 해왔다. SchemaUpdate를 변경하여 SQL 문을 출력하고 실행했습니다.

이로 인해 스키마 업데이트가 실패하지 않은 SQL 오류가 생성되었습니다 (모두 정상이라고 말함). 나는 클래스에서 프로퍼티 이름으로 "Order"라는 이름을 사용했다. 물론 이것은 SQL의 예약어이다. 나는 그 이름을 다른 것으로 바꾸었고 모든 것이 잘 작동합니다.

다음 사람은이 문제를 해결하는 방법은 다음과 같습니다

  1. 가 FNH가 hbm.xml 파일을 생성합니다. 당신은 당신의 오토 구성에 ExportTo를 호출하여이 작업을 수행 :

    .Mappings(m => m.AutoMappings.Add(
         AutoMap.AssemblyOf<CupTree>(config) 
         .Conventions.Add(
          DefaultLazy.Never(), 
          Table.Is(x => x.EntityType.Name + "s")) 
         .UseOverridesFromAssembly(Assembly.GetAssembly(typeof(CupTreeOverride))) 
         ).ExportTo(@"C:\nh.out")) 
    
  2. 가 출력 된 파일을 점검하고 있는지 모두가 정확한지 확인하십시오. 그렇지 않은 경우 매핑 문제가 있습니다.

  3. xml 파일이 양호하면 실행중인 SQL 문을 확인하십시오. SchemaUpdate.Execute의 첫 번째 매개 변수 (스크립트)를 true로 설정하면됩니다.

    .ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(true, true)) 
    
  4. 생성 된 SQL을 복사하여 붙여넣고 데이터베이스에 대해 실행하십시오. 문제가 발생하면 오류가 발생하여 거기에서 벗어날 수 있습니다.

관련 문제