4 Stimmen

Ausschluss einiger Tabellen aus dem Fluent Nhibernate Schema Generation

Ich habe einige bestehende Asp.net-Mitgliedschaft und Rollen Tabellen in einer Legacy-DB und ich bin Mapping sie auf neue Entitäten mit Fluent Nhibernate.

Ich generiere das Schema auch direkt aus Fluent Nhibernate und passe dann das generierte SQL-Skript manuell an, um die vorhandenen Tabellen auszuschließen.

Ist es möglich, Fluent Nhibernate mitzuteilen, dass bestimmte Tabellen von der Generierung ausgeschlossen werden sollen?

6voto

James Gregory Punkte 14055

SchemaAction.None() in Ihrer ClassMap.

0voto

dove Punkte 20015

Eine andere Möglichkeit wäre, ein Attribut zu erstellen, etwa

public class DoNotAutoPersistAttribute : Attribute
{
}

In AutoPersistenceModelGenerator könnten Sie dann in der Where-Klausel von AddEntityAssembly nach diesem Attribut suchen.

0voto

jenson-button-event Punkte 17193

Ich habe das mit einem Attribut + Konvention geregelt:

 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
   ...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X