目前我正在开发一个项目,我想使用Entity Framework为Interbase数据库创建数据库层。唯一的问题是我无法让它发挥作用,所以我转向我心爱的SO共同用户。
我目前正在使用:
Visual Studio 2013 Premium
Interbase XE7开发人员版(download here)
实体框架6.1.2
随Interbase XE7安装提供的Interbase ADO.NET驱动程序
对于此示例,我创建了一个非常简单的数据库,其中只有一个表UserTypes
,其中包含ID
和Description
。
我已经编写了以下代码来代表我的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数据库时也尝试了相同的代码,因此我认为我的代码通常没有任何问题。