无法让Firebird Embedded与FluentNHibernate一起使用

时间:2011-07-11 14:03:57

标签: c# nhibernate fluent-nhibernate firebird firebird2.5

新手在这里,

这是我第一次使用Firebird。我想将Firebird Embedded与FluentNHibernate一起使用,但是当我尝试运行我的测试程序时它会抛出异常。测试项目可以从here下载。

我的系统配置:

  • 火鸟-2.5.0.26074-0_Win32_embed
  • Firebird ADO.NET数据提供者2.6.5
  • FluentNHibernate 1.2.0.712
  • NHibernate 3.1.0.4000
  • Visual Studio 2010 SP1
  • .NET Framework 4.0
  • Windows 7 64位

以下是我采取的步骤:

  1. here下载Firebird-2.5.0.26074-0_Win32_embed.zip
  2. here下载NETProvider-2.6.5.zip
  3. 在Visual Studio 2010中创建新的控制台应用程序。
  4. 将zip文件的内容解压缩到.\bin\Debug
  5. 编写测试代码(详见下文)。
  6. 按F5。
  7. 但是我在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 :(得分:0)

你尝试使用完整路径

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

我不完全知道dotnet驱动程序,但通常使用firebird,我们提供了完整的路径。

答案 1 :(得分:0)

删除pdb文件不会导致任何问题。在抛出异常时获取行号很有帮助。

我也混淆了32位-64位的东西。所以现在我使用64位平台的FB嵌入式64位和32位平台的32位,我从未遇到任何问题。

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

维杰