2010-08-16 10 views
6

Ich beginne ein einfaches .NET-Projekt mit FluentNhibernate.
Ich habe einige Beispiele verfolgt, die ich im Internet gefunden habe und es scheint ziemlich einfach zu verstehen.
Ich habe festgestellt, dass, wenn ich FluentNhibernate mein DB-Schema erstellen (Sql Server 2000) generiert es NVARCHAR Felder für meine Zeichenfolgenmodell Eigenschaften.FluentNHibernate und VARCHAR-Spalten

Jemand schlug vor, dass ich eine Konvention hinzufügen kann, um den Typ zu ändern.

Dieses Stück Code funktioniert super:

public class AnsiStringConvention : IPropertyConvention 
     { 
      private static Type stringType = typeof(string); 
      public void Apply(FluentNHibernate.Conventions.Instances.IPropertyInstance instance) 
      { 
       if (instance.Property.PropertyType == stringType) 
       { 
        instance.CustomType("AnsiString"); 
       } 
      } 
     } 

Jetzt sind meine DB Felder VARCHAR, als ich erwartet hatte.
Ich musste eine Komponente zu meiner Klasse hinzufügen, nach dem DDD-Muster Ich habe die Adresse in einer separaten Klasse und fügte es meiner Kundenklasse.
Ich habe eine separate Zuordnungsdatei für die Adresse erstellt:

public class AddressMap : ComponentMap<Address> 
{ 
    public AddressMap() 
    { 
     Map(x => x.Number); 
     Map(x => x.Street) 
      .Length(100); 
     Map(x => x.City) 
      .Length(50); 
     Map(x => x.PostCode) 
      .Length(5); 
    } 
} 

Jetzt sind alle Felder meiner Customer-Tabelle VARCHAR aber die Felder der Adresse (Straße, Ort und Postleitzahl) Komponente als noch erstellt werden NVARCHAR.

+0

offenbar ein Fehler in Fluent-Nhibernate gibt es: es – LeftyX

Antwort

11

eine Lösung gefunden, die Definition AnsiString als CustomType:

public class AddressMap : ComponentMap<Address> 
{ 
    public AddressMap() 
    { 
     // this.Map(x => x.Number); 
     this.Map(x => x.Street) 
      .CustomType("AnsiString") 
      .Length(100); 
     this.Map(x => x.City) 
      .CustomType("AnsiString") 
      .Length(30); 
     this.Map(x => x.State) 
      .CustomType("AnsiString") 
      .Length(20); 
     this.Map(x => x.PostalCode) 
      .CustomType("AnsiString") 
      .Length(10); 
     this.Map(x => x.Country) 
      .CustomType("AnsiString") 
      .Length(40); 
    } 
} 
Verwandte Themen