首先是Firebird嵌入式和实体框架代码:设置连接字符串和提供者的正确方法是什么?

时间:2013-10-07 21:35:45

标签: c# entity-framework firebird-embedded

我必须使用Firebird嵌入式数据库和Entity Framework。我已下载连接器,如果我使用此代码:

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提供程序。我应该如何使用它?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

来自embeded包的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?
  2.         

    .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?我有点困惑......

答案 2 :(得分:0)

我一直在寻找一些东西并找到了这些资源。希望它可以帮到你:

  

使用Firebird嵌入式服务器
  用户= SYSDBA;密码= masterkey;数据库= SampleDatabase.fdb;数据源=本地主机;   端口= 3050;方言= 3;字符集= NONE;作用=;连接   寿命= 15;池=真;了MinPoolSize = 0; MaxPoolSize = 50;分组   大小= 8192;服务器类型= 1;

     

这是键/值ServerType = 1;告诉司机它在   *嵌入模式。*

来自Firebird网站: http://www.firebirdsql.org/en/net-examples-of-use/