1

我必须使用 Firebird 嵌入式数据库和实体框架。我已经下载了连接器,如果我使用此代码:

using FirebirdSql.Data.FirebirdClient;

[...]

string exePath = Path.GetDirectoryName(
    new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath);

FbConnectionStringBuilder fbStringBuilder = new FbConnectionStringBuilder();
fbStringBuilder.ServerType = FbServerType.Embedded;
fbStringBuilder.UserID = "SYSDBA";
fbStringBuilder.Password = "MASTERKEY";
fbStringBuilder.Dialect = 3;
fbStringBuilder.Charset = "UTF8";
fbStringBuilder.ClientLibrary = Path.Combine(exePath, "fbembed.dll");
fbStringBuilder.Database = Path.Combine(exePath, "test.fdb");


if (!File.Exists(Path.Combine(exePath, "test.fdb")))
{
    FbConnection.CreateDatabase(fbStringBuilder.ToString());
}

FbConnection fbConn = new FbConnection(fbStringBuilder.ToString());

try
{
    fbConn.Open();

    Console.WriteLine("OK");
}
catch (Exception ex)
{
    Console.WriteLine("ERROR");
    Console.WriteLine(ex.Message);
    Console.ReadKey();
}
finally
{
    fbConn.Close();
}

一切正常。但是当我尝试将该连接字符串与 DbContext 一起使用时:

public class FirebirdEmbededExampleDbContext : DbContext
{
    public FirebirdEmbededExampleDbContext(string connString) : base(connString)
    {
        this.Database.Connection.ConnectionString = connString;
    }

    public DbSet<ItemA> ItemsA { get; set; }
    public DbSet<ItemB> ItemsB { get; set; }
}

它失败并显示消息:

Unsupported keyword: 'server type'

看来 EF 没有使用 Firebird 提供程序。我应该如何使用它?

4

3 回答 3

2

DbContext应该是这样的:

public class FirebirdEmbededExampleDbContext : DbContext
{
    public FirebirdEmbededExampleDbContext(string connString) 
      : base(new FbConnection(connString), true)
    { }

    public DbSet<ItemA> ItemsA { get; set; }
    public DbSet<ItemB> ItemsB { get; set; }
}

你必须给它一个它应该使用的线索FirebirdClient

于 2013-10-09T07:02:50.930 回答
1

来自嵌入包的 Firebird_v2.1.4.InstallationGuide.pdf:

客户端访问只能通过本地 (XNET) 协议,即不能包含服务器名称“localhost”或 IP 地址 127.0.0.1 的 TCP/IP 本地环回连接字符串。嵌入式服务器仅支持本地连接到没有服务器名称的绝对数据库文件路径。

所以这DataSource=localhost是不支持的(当我运行该代码时,我得到了同样的错误Unsupported keyword: 'datasource'

但还有一件事。常见问题解答说(http://www.firebirdsql.org/en/firebird-net-provider-faq/#1):

  1. 支持哪些版本的 MS.NET Framework?

.NET 1.0、.NET 1.1、.NET 2.0 和 .NET Compact Framework 2.0

但在下载部分说(http://www.firebirdsql.org/en/net-provider/):

2013 年 10 月 5 日 - NETProvider-3.2.0.0.msi - 815 KB - FirebirdClient,Windows 安装程序

2013 年 10 月 5 日 - NETProvider-3.2.0.0-NET40.7z - 322 KB - FirebirdClient - .NET 4.0

2013 年 10 月 5 日 - NETProvider-3.2.0.0-NET45.7z - 349 KB - FirebirdClient - .NET 4.5

所以连接器适用于 NET 4.0/4.5 但嵌入说它只支持 NET 2.0 ?我有点困惑...

于 2013-10-08T15:22:37.367 回答
0

我一直在寻找一些东西并找到了这些资源。希望对您有所帮助:

使用 Firebird 嵌入式服务器
User=SYSDBA;Password=masterkey;Database=SampleDatabase.fdb;DataSource=localhost; 端口=3050;方言=3;字符集=无;角色=;连接寿命=15;池=真;MinPoolSize=0;MaxPoolSize=50;包大小=8192;ServerType=1;

这是键/值 ServerType=1; 告诉驱动程序它处于 *嵌入式模式。*

从火鸟网站: http ://www.firebirdsql.org/en/net-examples-of-use/

于 2013-10-08T02:22:03.550 回答