Nhibernate (Свободно) SchemaExport и SQlite Проблема! - PullRequest
0 голосов
/ 12 апреля 2011

Я использую Nhibernate (Fluent) с Sqlite, и он работал без проблем, что я сделал:

  • Создайте POCO EntityClasses для каждой таблицы следующим образом:

    public class tbl_Manufactor : BusinessObject<tbl_Manufactor>
    {
        public virtual string Name { get; set; }
    }
    

Все классы сущностей наследуются от BusinessObject, который содержит свойство ID и простые функции CRUD. У меня есть также другие 6 классов сущностей

  1. Создайте сопоставления с FluentHibernate следующим образом:

    using Database.Entitites;
    using FluentNHibernate.Mapping;
    
    namespace Database.Mappings
    {
        public class tbl_ManufactorMap : ClassMap<tbl_Manufactor>
        {
            public tbl_ManufactorMap()
            {
                Id(x => x.ID);
                Map(x => x.Name);
            }
        }
    }
    
  2. Создайте конфигурацию Fluent следующим образом:

 var Config = Fluently.Configure()
            .Database(SQLiteConfiguration.Standard  
                .ConnectionString(c=>c.FromConnectionStringWithKey("dbconnection"))  
                .ShowSql())  
            .Mappings(m =>  
                m.FluentMappings.AddFromAssemblyOf<tbl_Manufactor>())     
            .ExposeConfiguration(cfg =>  _configuration = cfg)  

            sessionFactory = Config.BuildSessionFactory();
  1. Выполните SchemaExport для создания схемы с:

    new SchemaExport(_configuration)
                    .Create(false, true);
    

Затем Nhibernate создал полностью работающую базу данных SQlite с правильными таблицами!

Но потом я хотел добавить 2 класса сущностей (я сделал это так же, как и раньше), но когда я запускаю свой тест (который создал мою первую схему базы данных), он не добавляет новые классы (таблицы) в базу !

Самое безумное, что тест всегда удаляет любую созданную базу данных и воссоздает ее при помощи SchemaExport каждый раз, когда я запускаю тест.

Может ли кто-нибудь мне помочь?

Ответы [ 3 ]

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

У вас также есть возможность использовать Выполнить напрямую для обновлений базы данных:

bool script = false;
bool update = true;
new SchemaExport(_configuration).Execute(script, update);

Редактировать: Убедитесь, что классы сопоставления являются общедоступными.

1 голос
/ 12 апреля 2011

Sqlite в памяти существует только на время жизни соединения. Поэтому для каждого нового соединения вам нужно начинать с самого начала.

Я знаю два решения для этого. Один из них - использовать только один сеанс (и соединение) для модульных тестов. Другой - то, что я сделал: я реализовал провайдера соединений, который всегда возвращает одно и то же соединение.

0 голосов
/ 12 апреля 2011

Вы можете проверить следующее: - Новые классы сущностей находятся в той же сборке?- Проверьте также наличие петли в модели.

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