2009-07-06 11 views
0

Dans le projet, je travaille maintenant, nous avons la classe de base de l'entité qui ressemble à ceci:En utilisant Fluent NHibernate Mapping automatique pour la carte ID d'objet de type de classe de base de l'entité

public abstract class Entity<T> where T : Entity<T> 
{ 
    public virtual object Id { get; protected set }  
    // Equals, GetHashCode overrides, etc... 
} 

La plupart des classes héritant de l'entité doit mapper l'ID à la colonne int dans la base de données SQL Server, mais au moins l'un d'entre eux doit correspondre à long (bigint).

Est-il possible de créer une convention de mappage automatique FluentNH pour mapper ces ID d'objet à int par défaut?
Ensuite, nous pourrions utiliser une autre convention ou IAutoMappingOverride pour gérer les longs ID.

Merci!

Répondre

0

Pour répondre à ma propre question ... C'est possible.

Vous pouvez définir convention comme ceci:

internal class PrimaryKeyConvention : IIdConvention 
{ 
    public bool Accept(IIdentityPart id) 
    { 
     return true; 
    } 

    public void Apply(IIdentityPart id) 
    { 
     if (<ID should be long>) 
      id.SetAttribute("type", "Int64"); 
     else 
      id.SetAttribute("type", "Int32"); 
    } 
} 
Questions connexes