Interbase XE7和实体框架6.1.2

时间:2015-01-23 09:03:10

标签: c# entity-framework interbase

目前我正在开发一个项目,我想使用Entity Framework为Interbase数据库创建数据库层。唯一的问题是我无法让它发挥作用,所以我转向我心爱的SO共同用户。

我目前正在使用:

  • Visual Studio 2013 Premium

  • Interbase XE7开发人员版(download here

  • 实体框架6.1.2

  • 随Interbase XE7安装提供的Interbase ADO.NET驱动程序

对于此示例,我创建了一个非常简单的数据库,其中只有一个表UserTypes,其中包含IDDescription

我已经编写了以下代码来代表我的UserTypes模型和我的背景(这确实非常基础):

public class MyContext : DbContext
{
    public MyContext(DbConnection connection)
        : base(connection, true)
    { }

    public virtual DbSet<UserTypes> UserTypes { get; set; }
}

public class UserTypes
{
    [Key]
    public int ID { get; set; }

    [StringLength(40)]
    public string Description { get; set; }
}

在我的Main内,我创作了以下代码:

static void Main(string[] args)
{
    TAdoDbxConnectionStringBuilder CnStrBuilder = new TAdoDbxConnectionStringBuilder()
    {
        User_Name = "SYSDBA",
        Password = "masterkey",
        DBHostName = "localhost",
        Database = @"C:\Users.gdb",
        DriverName = "Interbase"
    };

    DbConnection connection = new TAdoDbxInterBaseConnection();
    connection.ConnectionString = CnStrBuilder.ConnectionString;

    using (var context = new MyContext(connection))
    {
        Console.WriteLine("Showing all user types");

        var query = from ut in context.UserTypes
                    orderby ut.ID
                    select ut;

        foreach (var userType in query)
        {
            Console.WriteLine("{0}: {1}", userType.ID, userType.Description);
        }
    }

    Console.WriteLine("Press any key to exit...");
    Console.ReadKey();
}

但是,当我运行应用程序时,在执行LINQ查询时会抛出ProviderIncompatibleException。该例外有以下消息:

A null was returned after calling the 'get_ProviderFactory' method on a store provider instance of type 'Borland.Data.TAdoDbxInterBaseConnection'. The store provider might not be functioning correctly.

我对例外的解释是Embarcadero提供的提供商不提供对实体框架的支持。所以我的问题如下:

  • Interbase ADO.NET驱动程序是否为实体框架提供支持?或者我做错了什么?

  • 是否有任何其他驱动程序支持我所需的功能?

对此主题的任何帮助都将受到高度赞赏。

我在尝试使用成功运行的Microsoft SQL Server数据库时也尝试了相同的代码,因此我认为我的代码通常没有任何问题。

1 个答案:

答案 0 :(得分:4)

据我目前所知,不支持将Interbase数据库与EF连接。但是,应该可以根据EF的指南编写您自己的提供者,here可以找到。

要开始使用,您可能需要查看FireBird提供程序(它是开源的)并且已经在使用EF。如果您研究提供的代码,您可能有一个很好的触发器来为EF编写自己的Interbase提供程序。可以找到FireBirds EF .NET Provider的链接here