2010-03-31 3 views
1

J'ai un composant avec un certain nombre de propriétés qui ont divers attributsCourant-NHibernate - attributs de propriétés des composants ignorés par la convention

Normalement, lorsque ces attributs sont ajoutés à une plaine ancien objet de domaine, ils sont repris par mes AttributeConventions personnalisés .

Pour les propriétés de composant, elles ne le sont pas. Y a-t-il un câblage supplémentaire nécessaire pour ceux-ci?

par exemple.

public class Component 
{ 
    [Length(Max=50)] 
    public virtual string Name {get; set;} 
} 

public class MyClass 
{ 
    public virtual Component Component {get; set;} 

    [Length(Max=50)] 
    public virtual string Color {get; set;} 
} 

je reçois un MyClass de table avec des colonnes couleur & ComponentName

La couleur est un nvarchar (50), tandis que ComponentName est un nvarchar (255) (la valeur par défaut)

Répondre

2

OK si reposant sur le bâti -dans la magie qui lie NHibernate.Validators LengthAttribute à la longueur de votre colonne de table ne semble pas être une bonne idée. La magie est que pour les classes standard de tourbières, cela est naturellement pris en charge par Fluent. Afin de le forcer, j'ai créé ma propre convention pour le gérer:

public class LengthConvention : AttributePropertyConvention<LengthAttribute> 
    { 
     protected override void Apply(LengthAttribute attribute, IPropertyInstance instance) 
     { 
      // override the default column length 
      if (attribute.Max != default(int)) instance.Length(attribute.Max); 
     } 
    } 
Questions connexes