不能使用FluentNHibernate获得Firebird嵌入式工作

本文关键字:Firebird 嵌入式 工作 获得 FluentNHibernate 不能 | 更新日期: 2023-09-27 18:01:49

新手来了,

这是我第一次使用Firebird。我想使用Firebird嵌入FluentNHibernate,但它抛出异常当我试图运行我的测试程序。测试项目可以从这里下载。

我的系统配置:
  • Firebird-2.5.0.26074-0_Win32_embed
  • 火鸟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

经过进一步的测试,我发现如果我从.'bin'Debug文件夹中删除NETProvider-2.6.5.zipFirebirdSql.Data.FirebirdClient.pdb文件。测试程序可以正常运行。但我不确定删除它是否会引起其他问题。

下面是我的测试代码:

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; }
    }
}

任何想法?谢谢。

不能使用FluentNHibernate获得Firebird嵌入式工作

删除pdb文件不会引起任何问题。当抛出异常时,它有助于获取行号。

我在混合32位和64位的东西时也遇到了麻烦。所以现在我在64位平台上使用FB嵌入式64位,在32位平台上使用32位,我从来没有遇到过任何问题。

试着清理你的调试文件夹,并重新复制FB 64位文件,看看它是否有效。

Vijay

是否尝试使用完整路径

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

对于。net驱动程序我不太清楚,但是对于firebird,我们通常使用全路径