2010-08-16 16 views
6

Zaczynam prosty projekt .NET z FluentNhibernate.
Podążyłem za kilkoma przykładami znalezionymi w Internecie i wydaje mi się, że łatwo je zrozumieć.
Zdałem sobie sprawę, że jeśli pozwolę FluentNhibernate zbudować mój schemat DB (Sql Server 2000) generuje on NVARCHAR pól dla moich właściwości modelu ciągów.FluentNHibernate i VARCHAR Kolumny

Ktoś zasugerował, że mogę dodać konwencję, aby zmienić typ.

Ten fragment kodu działa świetnie:

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

Teraz moje pola DB są VARCHAR, jak się spodziewałem.
Potrzebowałem dodać komponent do mojej klasy, zgodnie ze wzorem DDD Umieściłem adres w oddzielnej klasie i dodałem go do mojej klasy Klienta.
stworzyłem osobny plik odwzorowania na adres:

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

Teraz wszystkie dziedziny mojego stolika klienta są VARCHAR ale polach Adres (ulica, miasto i kod pocztowy) składnikiem są nadal tworzone jako NVARCHAR.

+0

Najwyraźniej nie jest to błąd w Fluent NHibernate-: -S – LeftyX

Odpowiedz

11

znalazł rozwiązanie definiowania AnsiString jak 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); 
    } 
} 
Powiązane problemy