Свободный NHibernate - удаление схемы из сопоставлений для тестирования с SQLite - PullRequest
3 голосов
/ 28 апреля 2011

Я пытаюсь запустить некоторые тесты для моего отображения с использованием SQLite. Мои отображения выглядят следующим образом:

public class UserMap : BaseValidatableDomainMap<User>
{
    public UserMap()
    {
        Table("blanka.[User]");
        Id(x => x.Id).GeneratedBy.Identity();

        Map(x => x.UserName);
        Map(x => x.FirstName);
        Map(x => x.MiddleName);
        Map(x => x.LastName);
        Map(x => x.EmailAddress);
        Map(x => x.OtherEmailAddress);
        Map(x => x.PhoneNumber);
        Map(x => x.City);

        References(x => x.Company, "CompanyId");
        References(x => x.State, "StateId");
    }
}

Проблема в том, что бланка приводит к сбою конфигурации ниже. Если я удаляю схему blanka из своего отображения, мои тесты проходят успешно, но очевидно, что мои отображения перестают работать в моем реальном приложении. Есть ли способ удалить схему blanka из моего отображения где-то в коде установки ниже? Или есть способ настроить SQLite для работы с ним?

    static ISessionFactory BuildSessionFactory()
    {
        return Fluently.Configure()
            .Database(SQLiteConfiguration.Standard.UsingFile(DB_FILE_NAME))
            .Mappings(m => m.FluentMappings.Add<UserMap>())
            .Mappings(m => m.FluentMappings.Add<CompanyMap>())
            .Mappings(m => m.FluentMappings.Add<StateMap>())
            .ExposeConfiguration(BuildSchema)
            .BuildSessionFactory();
    }

    static void BuildSchema(NHibernate.Cfg.Configuration cfg)
    {
        if (File.Exists(DB_FILE_NAME))
            File.Delete(DB_FILE_NAME);
        new SchemaExport(cfg).Create(false, true);
    }

Обновление

Вот как я это исправил:

Я удалил схему из своей UserMap, чтобы она выглядела так:

public class UserMap : BaseValidatableDomainMap<User>
{
    public UserMap()
    {
        Table("[User]");
        Id(x => x.Id).GeneratedBy.Identity();

        Map(x => x.UserName);
        Map(x => x.FirstName);
        Map(x => x.MiddleName);
        Map(x => x.LastName);
        Map(x => x.EmailAddress);
        Map(x => x.OtherEmailAddress);
        Map(x => x.PhoneNumber);
        Map(x => x.City);

        References(x => x.Company, "CompanyId");
        References(x => x.State, "StateId");
    }
}

Затем я изменил конфигурацию своего приложения, чтобы установить для схемы по умолчанию значение blanka, которое выглядит следующим образом:

    private static ISessionFactory CreateSessionFactory()
    {
        var config = Fluently.Configure();
        config = config.Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c.FromConnectionStringWithKey("BLANKADB")).DefaultSchema("blanka"))
        .ExposeConfiguration( c => c.SetProperty("current_session_context_class", "web"))
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<BlankaObject>());
        return config.BuildSessionFactory();
    }

И я оставил свой тестовый конфиг SQLite один, потому что он ненавидит схемы. = D

Ответы [ 2 ]

3 голосов
/ 28 апреля 2011

из свободно NHibernate wiki :

public class PersonMap : ClassMap<Person>
{
  public PersonMap()
  {
    Schema("alternativeSchema");
  }
}
3 голосов
/ 28 апреля 2011

А как насчет использования свойства конфигурации default_schema (я знаю, что оно в конфигурации, не знаю, как вручную установить его) вместо того, чтобы помещать его в отображение классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...