2009-08-30 9 views
3

J'ai certaines tables d'appartenance et de rôles asp.net existantes dans une base de données héritée et je les mappe sur de nouvelles entités avec Fluent Nhibernate.Exclusion de certaines tables du schéma Fluent Nhibernate Génération

Je génère également le schéma directement à partir de Fluent Nhibernate et j'ajuste ensuite manuellement le script SQL généré pour exclure les tables existantes.

Est-il possible de dire à Fluent Nhibernate d'exclure de la génération certaines tables?

Répondre

4

SchemaAction.None() dans votre ClassMap.

+0

Je vois un enum SchemaAction, mais où dois-je mettre dans mon classmap? Il suffit d'insérer SchemaAction.None(); ne fonctionne pas. – Ronnie

+0

non disponible dans un remplacement de mappage? –

0

Une autre option serait de créer un attribut, par exemple

public class DoNotAutoPersistAttribute : Attribute 
{ 
} 

Puis, en AutoPersistenceModelGenerator vous pouvez vérifier cet attribut dans la clause Where de AddEntityAssembly.

0

J'ai réussi cela avec un attribut + convention:

public enum SchemaAction 
    { 
    None 
    } 


[Serializable] 
[AttributeUsage(AttributeTargets.Class)] 
public class SchemaActionAttribute : Attribute 
{ 
    private readonly SchemaAction schemaAction = SchemaAction.None; 

    public SchemaActionAttribute() 
    { 
    } 

    public SchemaActionAttribute(SchemaAction schemaAction) 
    { 
     this.schemaAction = schemaAction; 
    } 

    public SchemaAction GetSchemaAction() 
    { 
     return schemaAction; 
    } 
    } 

    /// <summary> 
    /// overrides the default action for entities when creating/updating the schema 
    /// based on the class having a Schema attribute (<see cref="SchemaActionAttribute" />) 
    /// </summary> 
    public class SchemaActionConvention : IClassConvention 
    { 
    public void Apply(IClassInstance instance) 
    { 

     object[] attributes = instance.EntityType.GetCustomAttributes(true); 
     foreach (object t in attributes) 
     { 
     if (t is SchemaActionAttribute) 
     { 
      var a = (SchemaActionAttribute) t; 
      switch(a.GetSchemaAction()) 
      { 
      case SchemaAction.None: 
       instance.SchemaAction.None(); 
       return; 
      default: throw new ApplicationException("That schema action:" + a.GetSchemaAction().ToString() + " is not currently implemented."); 
      } 

     } 
     } 
    } 
    } 

... 

[SchemaAction(SchemaAction.None)] 
public class TextItem : Entity 
    ... 
Questions connexes