2010-08-20 6 views
9

utilisant Fluent NHibernate et automappings (NHibernate crée mon schéma db), comment puis-je NHibernate pour créer une colonne nvarchar (max) dans la base de données en fonction de la classe suivanteCourant NHibernate propriété de 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) 
} 

Répondre

27

Avec vous AutoMapping pouvez remplacer la longueur par défaut pour les champs de texte, mais il sera appliqué à tous les champs de texte.

Vous devriez pouvoir combiner l'automapping avec des mappages explicites créés avec l'API fluide.

Heureusement, ceci est une classe assez simple à la carte (je suppose que cela fait partie d'une hiérarchie table par sous-classe, ce qui est la raison pour laquelle j'utilise SubClassMap<> au lieu de ClassMap<> et ne mappe pas un identifiant):

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 fait, je n'ai jamais utilisé les automappings, donc je suppose que cela sera repris correctement, mais je ne sais pas avec certitude. N'oubliez pas d'ajouter le mappage dans votre configuration.

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

thanx m8, après une petite configuration et en utilisant votre exemple, il a travaillé comme un charme .. –

+0

Veuillez garder à l'esprit que l'utilisation de .Length (int.MaxValue) correspond à nvarchar (255). De plus, n'utilisant pas .Length, correspond à nvarchar (255) – veeroo

2

Définissez la propriété longueur à un nombre élevé (j'utilise 10000) - cela entraînera NHibernate pour faire un nvarchar (max)

+0

Comment définit-on la longueur d'une propriété? –

+0

Carte (x => x. ) .Longueur (10000) :-) – Goblin

+0

hmmmm désolé ... peut-être que j'aurais dû vous dire que j'ai commencé à utiliser nhibernate il y a 2 jours :), cela signifie que je n'ai absolument aucune idée d'où doit aller. Merci pour votre aide –

Questions connexes