Исключение некоторых таблиц из генерации схемы Fluent Nhibernate - PullRequest
3 голосов
/ 30 августа 2009

У меня есть несколько существующих таблиц членства и ролей asp.net в устаревшей базе данных, и я сопоставляю их с новыми объектами с помощью Fluent Nhibernate.

Я также генерирую схему непосредственно из Fluent Nhibernate, а затем вручную настраиваю сгенерированный сценарий sql, чтобы исключить существующие таблицы.

Можно ли сказать Fluent Nhibernate об исключении из генерации определенных таблиц?

Ответы [ 3 ]

5 голосов
/ 31 августа 2009

SchemaAction.None() в вашей карте классов.

0 голосов
/ 07 августа 2012

Я справился с этим с помощью атрибута + соглашение:

 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
   ...
0 голосов
/ 18 сентября 2009

Другой вариант - создать атрибут, скажем,

public class DoNotAutoPersistAttribute : Attribute
{
}

Затем в AutoPersistenceModelGenerator вы можете проверить этот атрибут в предложении Where в AddEntityAssembly.

...