新手来了,
这是我第一次使用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
- 下载
Firebird-2.5.0.26074-0_Win32_embed.zip
下载 - 在Visual Studio 2010中创建一个新的控制台应用程序。
- 将zip文件的内容解压到
.binDebug
- 编写测试代码(详见下文)
- 按F5。
NETProvider-2.6.5.zip
但是我在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
经过进一步的测试,我发现如果我从.binDebug
文件夹中删除NETProvider-2.6.5.zip
的FirebirdSql.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; }
}
}
任何想法?谢谢。
删除pdb文件不会引起任何问题。当抛出异常时,它有助于获取行号。
我在混合32位和64位的东西时也遇到了麻烦。所以现在我在64位平台上使用FB嵌入式64位,在32位平台上使用32位,我从来没有遇到过任何问题。
试着清理你的调试文件夹,并重新复制FB 64位文件,看看它是否有效。
Vijay
是否尝试使用完整路径
dbPath = "c:appdatatest.gdb";
对于。net驱动程序我不太清楚,但是对于firebird,我们通常使用全路径