2010-11-04 6 views
2

Je sais que cette question a été soulevée sous une forme similaire à plusieurs reprises, mais aucun des threads pourrait me donner la réponse concrète à ma question. J'utilise l'auto-mappage Fluent NHibernate et Fluent pour mapper les entités de mon domaine. En ce moment, j'utilise cette classe convention pour définir toutes les propriétés NOT NULL:Fluid NHibernate - automapping: autoriser null pour les propriétés simples

public class NotNullColumnConvention : IPropertyConvention 
{ 
    public void Apply(FluentNHibernate.Conventions.Instances.IPropertyInstance instance) 
    { 
     instance.Not.Nullable(); 
    } 
} 

La grande question est:

Que dois-je faire, pour permettre des propriétés uniques de mes classes d'entités à NULL?

Voici une de mes classes d'entité:

public class Employee : Entity 
{ 
    public virtual string FirstName { get; set; } 
    public virtual string LastName { get; set; } 
} 

vraiment je serais à l'heureux, si quelqu'un peut enfin me aider! Toutes les chaînes de recherche possible, je suis entré dans les pages Google de retour, marqué comme déjà visité ...

Merci,
Arne

EDIT: Changé titre ... Voulez-vous permettre NULL pour les propriétés individuelles

Répondre

4

Créer un attribut:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)] 
public class CanBeNullAttribute : Attribute 
{ 
} 

Et une convention:

public class CanBeNullPropertyConvention : IPropertyConvention, IPropertyConventionAcceptance 
{ 
    public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria) 
    { 
     criteria.Expect(
      x => !this.IsNullableProperty(x) 
      || x.Property.MemberInfo.GetCustomAttributes(typeof(CanBeNullAttribute), true).Length > 0); 
    } 

    public void Apply(IPropertyInstance instance) 
    { 
     instance.Nullable(); 
    } 

    private bool IsNullableProperty(IExposedThroughPropertyInspector target) 
    { 
     var type = target.Property.PropertyType; 

     return type.Equals(typeof(string)) || (type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>))); 
    } 
} 

Supprimez l'attribut au-dessus de vos propriétés.

+0

Merci pour votre réponse Mathieu! Je vais essayer votre approche! Que signifie "typeof (Nullable <>)? Et je ne dois pas marquer les propriétés individuelles? En utilisant votre approche, quelles propriétés sont autorisées à ne pas être nul, Strings? – dasnervtdoch

+0

@dasnervtdoch vous mettez l'attribut sur les propriétés que vous voulez marquer comme nullable. – mathieu

Questions connexes