2009-03-13 18 views
4

Ich habe mit FluentNhibernate als Teil der S # arp Architektur gespielt. Unten sehen Sie ein Beispiel für ein Mapping.Fluent Nhibernate Schema Generation

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(); 
    } 
} 

Ich verwende dann die Nhibernate-Schema-Generation, um meine ddl in eine Datei auszugeben.

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); 

So weit so gut. Das generierte ddl für diese Tabelle stimmt jedoch nicht überein und enthält tatsächlich einen Fehler.

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) 
) 
  • ENUM Staat selbst als Zeichenfolge dargestellt, obwohl ich es zu zwingen versucht, die Zuordnung nicht zu verwenden INT
  • Die Telefonnummer Länge entspricht.

Ich fragte mich, wie ich über das Debugging gehe. Ist das ein Problem mit dem Mapping in FluentNH oder ist es ein Problem mit dem Schema Generator? Wenn ich die erzeugte XML ausgeben könnte, könnte ich das verifizieren. Weiß jemand, wie man das macht?

Danke,

Antwort

7

Fluent Configuration können Sie die XML exportieren.

Wie neu ist Ihre Kopie von #arch, und genauer, wissen Sie, welche Überarbeitung von Fluent NHibernate es verwendet?

Der Enum-Typ wird durch eine Konvention überschrieben, die angibt, dass enums als Zeichenfolgen zugeordnet werden sollen, anstatt CustomSqlType zu verwenden, indem Sie einfach CustomTypeIs<int>() verwenden.

Wie für die Länge der Spalten, das klingt wie ein Fehler, aber ob es immer noch ein Problem ist, hängt davon ab, welche Version Sie ausführen.

+0

Hallo James, Ich benutzte die neueste Build 337 Ich denke, aber ich sah, dass sie die RC2 am Freitag so aktualisiert veröffentlicht und dies scheint dieses Problem behoben haben. Danke, – madcapnmckay