2010-08-20 22 views
9

usando nhibernate fluidez, y automappings (nhibernate crea mi esquema de db), ¿cómo puedo obtener nhibernate para crear una columna nvarchar (max) en la base de datos en base a la siguiente claseFluido NHibernate automapping como nvarchar (max)

public class VirtualPage : BaseEntity 
{ 
    public virtual int ParentId { get; set; } 
    public virtual string PageName { get; set; } 
    public virtual string Title { get; set; } 
    public virtual string Body { get; set; } 
    public virtual string ViewName { get; set; } 
    public virtual string ViewData { get; set; } // this must be nvarchar(max) 
} 

Respuesta

27

con automapping puede sustituir la longitud predeterminada de los campos de texto, sino que será aplicado a todos los campos de texto

Debe poder combinar la automatización con asignaciones explícitas creadas con la API fluida.

Afortunadamente, esto es una clase muy simple de mapa (estoy suponiendo que esto es parte de una jerarquía de tabla-por-subclase, por lo que utilizo en lugar de SubClassMap<>ClassMap<> y no se asignan un identificador):

public class VirtualPageMap : SubClassMap<VirtualPage> 
{ 
    public VirtualPageMap() 
    { 
     Map(x => x.ParentId); 
     Map(x => x.PageName); 
     Map(x => x.Title); 
     Map(x => x.Body); 
     Map(x => x.ViewName); 
     Map(x => x.ViewData).Length(4001); // anything over 4000 is nvarchar(max) 
    } 
} 

En realidad, nunca he usado los autómatas, por lo que supongo que se recogerá correctamente, pero no estoy seguro.

No olvide agregar la asignación en su configuración.

Fluently.configure(
    // blah blah blah 
    .Mappings(m => 
    { 
     m.FluentMappings.AddFromAssemblyOf<VirtualPage>(); 
     m.AutoMappings.Add(// blah blah blah 
    } 
+0

thanx m8, después de poca configuración y usando su ejemplo funcionó como un encanto .. –

+0

Tenga en cuenta que el uso de .Length (int.MaxValue) se asigna a nvarchar (255). Además, al no usar .Length en absoluto, se asigna a nvarchar (255) – veeroo

2

establece la propiedad length en un número alto (utilizo 10000) - esto hará que NHibernate para hacer un nvarchar (max)

+0

¿cómo se establece la longitud de una propiedad? –

+0

Mapa (x => x. ). Longitud (10000) :-) – Goblin

+0

hmmmm lo siento ... tal vez debería haber dicho que comencé a usar nhibernate hace 2 días :), esto significa que no tengo absolutamente ninguna idea de dónde eso Debe ir. Gracias por ayudar –

Cuestiones relacionadas