2009-03-13 8 views
4

저는 S # arp 아키텍처의 일부로 FluentNhibernate를 사용했습니다. 다음은 매핑 예입니다.Fluent Nhibernate 스키마 생성

public class EventBaseMap : ClassMap<EventBase> 
{ 
    public EventBaseMap() 
    { 
     WithTable("Event_Header"); 
     //NotLazyLoaded(); 

     Id(x => x.Id).WithUnsavedValue(-1).GeneratedBy.Native(); 

     Map(x => x.Name).WithLengthOf(50).Not.Nullable(); 
     Map(x => x.Description).WithLengthOf(255); 
     Map(x => x.Rating); 
     Map(x => x.Price); 
     Map(x => x.PhoneNumber).WithLengthOf(20).Not.Nullable(); 
     Map(x => x.EmailAddress); 
     Map(x => x.Website); 
     Map(x => x.State).Not.Nullable().CustomSqlTypeIs("INT"); 

     Component(x => x.Ages, m => 
     { 
      m.Map(x => x.From).TheColumnNameIs("AgeFrom"); 
      m.Map(x => x.To).TheColumnNameIs("AgeTo"); 
     }); 

     HasMany(x => x.Calendar).AsBag(); 

     HasManyToMany(x => x.Tags) 
      .WithTableName("Event_Tags") 
      .WithParentKeyColumn("EventId") 
      .WithChildKeyColumn("TagId").AsBag(); 
    } 
} 

그런 다음 Nhibernate 스키마 생성을 사용하여 내 ddl을 파일로 출력합니다.

FileInfo t = new FileInfo(Server.MapPath("~/bin/MyDDL.sql")); 
     StreamWriter writer = t.CreateText(); 

     new SchemaExport(cfg).Execute(true, false, false, true, NHibernateSession.Current.Connection, writer); 

지금까지 그렇게 좋았습니다. 그러나이 테이블에 대해 생성 된 ddl은 일치하지 않으며 실제로 오류가 있습니다.

create table Event_Header (
    Id INT IDENTITY NOT NULL, 
    EmailAddress NVARCHAR(255) null, 
    PhoneNumber NVARCHAR(255) null, 
    State string null, 
    Website NVARCHAR(255) null, 
    Description NVARCHAR(255) null, 
    Name NVARCHAR(255) null, 
    Price DECIMAL(19,5) null, 
    Rating INT null, 
    AgeTo INT null, 
    AgeFrom INT null, 
    primary key (Id) 
) 
  • 열거 주

    은 내가 전화 번호 길이가 매핑과 일치하지 않는 INT
  • 를 사용하도록 강제로 시도에도 불구하고 문자열로 표현된다.

나는 이것을 디버깅하는 방법에 대해 궁금해하고 있었다. 이것이 FluentNH의 매핑 문제입니까 아니면 스키마 생성기의 문제입니까? 내가 생성 한 XML을 출력 할 수 있다면 확인할 수 있습니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까?

감사합니다,

답변

7

Fluent Configuration 당신이 XML을 내보낼 수 있습니다.

#arch의 복사본은 얼마나 최근입니까? 더 구체적으로, 사용중인 Fluent NHibernate의 개정판을 알고 계십니까?

열거 형은 CustomTypeIs<int>()을 사용하는 대신 CustomSqlType을 사용하는 대신 enum을 문자열로 매핑하도록 지정하는 규칙에 의해 무시됩니다.

열의 길이는 버그처럼 들리지만 여전히 문제인지 여부는 실행중인 버전에 따라 다릅니다.

+0

안녕하세요 제임스 저는 최신 빌드 337을 사용하고 있었지만 금요일에 RC2를 출시 한 것을 보았습니다. 그래서이 문제가 해결 된 것 같습니다. 감사합니다. – madcapnmckay