2016-04-12 2 views
0

я пытаюсь подключиться к SQL Server Express LocalDB с NHibernate, но я продолжаю получать исключение:NHibernate Не можете прикрепить MDF

недопустимый или неполной конфигурации был использован при создании SessionFactory. Для получения более подробной информации просмотрите коллекцию PotentialReasons и InnerException.

С внутренним исключением являются:

Не можете прикрепить файл 'Test.mdf' в базе данных 'Test'.

Я столкнулся с этой ошибкой, прежде чем при использовании Entity Framework и может исправить это с помощью:

> sqllocaldb stop v11.0 
> sqllocaldb delete v11.0 

Однако то, что не работает в данном случае. Ниже моя полная программа:

using FluentNHibernate.Cfg; 
using FluentNHibernate.Cfg.Db; 
using FluentNHibernate.Mapping; 
using NHibernate.Tool.hbm2ddl; 

namespace Sandbox 
{ 
    public class Person 
    { 
     public virtual int Id { get; set; } 
     public virtual string Name { get; set; } 
    } 

    public class PersonMap : ClassMap<Person> 
    { 
     public PersonMap() 
     { 
      Id(p => p.Id); 
      Map(p => p.Name); 
     } 
    } 

    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      var connectionString = 
       @"Data Source=(LocalDB)\v11.0;AttachDBFilename=Test.mdf;" + 
       @"Initial Catalog=Test;Integrated Security=True"; 

      var _sessionFactory = Fluently.Configure() 
       .Database(MsSqlConfiguration.MsSql2012.ConnectionString(connectionString)) 
       .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Program>()) 
       .ExposeConfiguration(cfg => new SchemaExport(cfg).Create(false, true)) 
       .BuildSessionFactory(); 
     } 
    } 
} 
+0

Есть ли в настоящее время Test.mdf? Работает ли он, если вы удаляете существующий и запускаете команды 'sqllocaldb'? –

+0

@TimS. Test.mdf не существует – maddisoj

ответ

0

Проблема была, в отличие от Entity Framework, NHibernate не будет создать базу данных для вас. Я должен был сначала сделать следующее, чтобы создать базу данных:

 var databaseName = "Test"; 
     var databaseFile = "Test.mdf"; 

     if(!File.Exists(databaseFile)) 
     { 
      var connectionString = @"Data Source=(LocalDB)\v11.0;Integrated Security=True;"; 
      var query = [email protected]" 
       CREATE DATABASE {databaseName} ON PRIMARY (
        NAME = '{databaseName}', 
        FILENAME = '{databaseFile}');"; 

      using(var connection = new SqlConnection(connectionString)) 
      { 
       using(var command = new SqlCommand(query, connection)) 
       { 
        connection.Open(); 
        command.ExecuteNonQuery(); 
       } 
      } 

      Console.WriteLine("Created database!"); 
     } 

NB: Это не код качества продукции, просто демонстрация проблемы.

 Смежные вопросы

  • Нет связанных вопросов^_^