Не удается заставить Firebird Embedded работать с FluentNHibernate - PullRequest
0 голосов
/ 11 июля 2011

Новичок здесь,

Я впервые использую Firebird.Я хочу использовать Firebird Embedded с FluentNHibernate, но он выдает исключение при попытке запустить мою тестовую программу.Тестовый проект можно загрузить с здесь .

Конфигурации моей системы:

  • Firebird-2.5.0.26074-0_Win32_embed
  • Firebird ADO.NET Data Provider 2.6.5
  • FluentNHibernate 1.2.0.712
  • NHibernate 3.1.0.4000
  • Visual Studio 2010 SP1
  • .NET Framework 4.0
  • Windows 7 64bit

Ниже приведены шаги, которые я предпринял:

  1. Загрузка Firebird-2.5.0.26074-0_Win32_embed.zip из здесь .
  2. ЗагрузкаNETProvider-2.6.5.zip из здесь .
  3. Создание нового консольного приложения в Visual Studio 2010.
  4. Извлечение содержимого zip-файлов в .\bin\Debug
  5. Введите тестовый код (см. Подробности ниже).
  6. Нажмите F5.

Но я получил следующее исключение при new SchemaExport(cfg).Create(false, true);:

FbException was unhandled by user code: Dynamic SQL Error SQL error code = -607 Invalid command Table A does not exist

После дальнейших тестов я обнаружил, удаляю ли я файл FirebirdSql.Data.FirebirdClient.pdb NETProvider-2.6.5.zip из папки .\bin\Debug.Тестовая программа может работать без ошибок.Но я не уверен, что удаление приведет к другим проблемам.

Ниже приведен мой тестовый код:

class Program
{
    static void Main(string[] args)
    {
        ISessionFactory sessionFactory = BuildSessionFactory();
        using (ISession session = sessionFactory.OpenSession())
        {
            using (ITransaction trans = session.BeginTransaction())
            {                    
            }
        }
    }

    static ISessionFactory BuildSessionFactory()
    {
        string dbPath = "test.db";
        string connectionString = String.Format(
            "User=SYSDBA;Password=masterkey;Database={0};Dialect=3;Charset=UTF8;ServerType=1;",
            dbPath);

        if (File.Exists(dbPath))
            File.Delete(dbPath);

        FbConnection.CreateDatabase(connectionString);

        FirebirdConfiguration cfg = new FirebirdConfiguration()
            .ConnectionString(connectionString)
            .AdoNetBatchSize(100);

        ISessionFactory sessionFactory = Fluently.Configure()
            .Database(cfg)
            .Mappings(m => m.FluentMappings.Add(typeof(AMappings)))
            .ExposeConfiguration(BuildSchema)
            .BuildConfiguration()
            .BuildSessionFactory();

        return sessionFactory;
    }

    static void BuildSchema(Configuration cfg)
    {
        new SchemaExport(cfg).Create(false, true);
    }

    public class AMappings : ClassMap<A>
    {
        public AMappings()
        {
            Id(x => x.Id).GeneratedBy.HiLo("100");
            Map(x => x.Text);
        }
    }

    public class A
    {
        public virtual long Id { get; private set; }
        public virtual string Text { get; set; }
    }
}

Есть идеи?Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 июля 2011

Удаление файла pdb не вызывает проблем. Это полезно для получения номеров строк при возникновении исключения.

У меня тоже были проблемы со смешиванием 32-битных и 64-битных вещей. Так что теперь я использую встроенный 64-битный FB для 64-битной платформы и 32-битный для 32-битной платформы, и я никогда не сталкивался с какими-либо проблемами.

Попробуйте почистить папку отладки и заново скопируйте 64-битные файлы FB и посмотрите, работает ли она.

Виджей

0 голосов
/ 13 июля 2011

вы пытаетесь с полным путем

dbPath = "c:\app\data\test.gdb";

Я не знаю точно с драйвером dotnet, но обычно с firebird мы ставим полный путь.

...