2010-08-16 14 views
6

Estoy comenzando un proyecto .NET simple con FluentNhibernate.
He seguido algunos ejemplos que he encontrado en Internet y parece bastante fácil de entender.
Me he dado cuenta de que si dejo que FluentNhibernate cree mi esquema DB (Sql Server 2000) genera NVARCHAR campos para mis cadenas de propiedades del modelo.Columnas FluentNHibernate y VARCHAR

Alguien me sugirió que puedo agregar una convención para cambiar el tipo.

Este fragmento de código funciona muy bien:

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

Ahora mis campos de base de datos son VARCHAR, como lo esperaba.
Necesitaba agregar un componente a mi clase, siguiendo el patrón DDD puse la dirección en una clase separada y la agregué a mi clase de Cliente.
He creado un archivo de asignación separada para la dirección:

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

Ahora, todos los campos de mi tabla de clientes son VARCHAR pero los campos de la Dirección (calle, ciudad y código postal) componente aún se crean como NVARCHAR.

+0

Aparentemente hay un error en Fluido-Nhibernate: -S – LeftyX

Respuesta

11

encontrado una solución que define AnsiString como 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); 
    } 
} 
Cuestiones relacionadas