Как создать базу данных с помощью FluentNHibernate?

Я пытаюсь использовать FluentNHibernate в своем тестовом проекте. Следующий код создает таблицы в существующей базе данных:

        var sessionFactory = FluentNHibernate
            .Cfg.Fluently.Configure()
            .Database(
                MsSqlConfiguration.MsSql2008.ConnectionString(
                    c => c.FromConnectionStringWithKey("DefaultConnection")))
            .CurrentSessionContext("web")
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<SqlCommandFactory>())
            .ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true))
            .BuildSessionFactory();

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

Источник данных = MAIN \ SQLEXPRESS; Начальный каталог = Magazine; Integrated Security = True; Время ожидания подключения = 15; Encrypt = False; TrustServerCertificate = True; ApplicationIntent = ReadWrite; MultiSubnetFailover = False

Также я пытаюсь использовать другой метод. Показано ниже.

new SchemaExport(cfg).Execute(true, true, false)

В этом случае я получаю другое исключение.

System.Data.SqlClient.SqlException: не удается открыть базу данных «Журнал», запрошенную при входе в систему. Не удалось войти в систему.

Меняю строку подключения.

Источник данных = (LocalDb) \ v11.0; AttachDbFilename = | DataDirectory | \ Magazine.mdf; Начальный каталог = Magazine; Integrated Security = True

В моем случае LocalDb был бы лучшим вариантом. Но, как и в первом случае с SQLEXPRESS, я снова получил исключение.

System.Data.SqlClient.SqlException: невозможно прикрепить файл «..... \ App_Data \ Magazine.mdf» как базу данных «Журнал».

Я использовал Code First для EF раньше и EF создает базу данных, если она отсутствует. Как я могу создать базу данных с помощью FluentNHibernate?


person Seva    schedule 27.05.2017    source источник


Ответы (1)


Просто попробуйте заменить

new SchemaUpdate(cfg).Execute(false, true) 

с участием

new SchemaExport(cfg).Create(false, true)
person Roman Koliada    schedule 29.05.2017
comment
Спасибо за ответ. Пожалуйста, посмотрите на мои изменения, о которых идет речь. Create(false, true) также вызывают исключение. В случае с LocalDB это Cannot attach the file, а в случае с SQLEXPRESS это The login failed. - person Seva; 29.05.2017
comment
Похоже, что-то не так со строкой подключения. Попробуйте подключиться к своей БД с помощью SSMS или чего-то еще - person Roman Koliada; 30.05.2017