Interbase XE7 和 Entity Framework 6.1.2
Interbase XE7 and Entity Framework 6.1.2
目前我正在做一个项目,我想使用 Entity Framework 为 Interbase 数据库创建一个数据库层。唯一的问题是我无法让它工作,所以我求助于我心爱的 SO 共同用户。
我目前正在使用:
Visual Studio 2013 高级版
Interbase XE7 开发者版 (download here)
Entity Framework 6.1.2
Interbase ADO.NET 驱动随 Interbase XE7 安装提供
对于这个例子,我创建了一个非常简单的数据库,只有 1 个 table 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提供的provider不支持Entity Framework。所以我的问题如下:
Interbase ADO.NET 驱动程序是否支持 Entity Framework?还是我做错了什么?
是否有其他驱动程序支持我想要的功能?
非常感谢有关此主题的任何帮助。
我在使用成功运行的 Microsoft SQL 服务器数据库时也尝试了相同的代码,所以我认为我的代码一般没有任何问题。
目前我正在做一个项目,我想使用 Entity Framework 为 Interbase 数据库创建一个数据库层。唯一的问题是我无法让它工作,所以我求助于我心爱的 SO 共同用户。
我目前正在使用:
Visual Studio 2013 高级版
Interbase XE7 开发者版 (download here)
Entity Framework 6.1.2
Interbase ADO.NET 驱动随 Interbase XE7 安装提供
对于这个例子,我创建了一个非常简单的数据库,只有 1 个 table 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提供的provider不支持Entity Framework。所以我的问题如下:
Interbase ADO.NET 驱动程序是否支持 Entity Framework?还是我做错了什么?
是否有其他驱动程序支持我想要的功能?
非常感谢有关此主题的任何帮助。
我在使用成功运行的 Microsoft SQL 服务器数据库时也尝试了相同的代码,所以我认为我的代码一般没有任何问题。