Interbase XE7 и Entity Framework 6.1.2
В настоящее время я работаю над проектом, в котором я хочу создать слой базы данных для базы данных Interbase, используя Entity Framework. Единственное, что я не могу заставить его работать, поэтому я обращаюсь к своим любимым СО-пользователям.
Я в настоящее время использую:
Visual Studio 2013 Premium
Interbase XE7 Developer Edition ( скачать здесь)
Entity Framework 6.1.2
Драйвер Interbase ADO.NET поставляется с установкой Interbase XE7
Для этого примера я создал очень простую базу данных только с 1 таблицей. 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();
}
Хотя, когда я запускаю приложение ProviderIncompatibleException
выбрасывается при выполнении запроса LINQ. Исключение имеет следующее сообщение:
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, не обеспечивает поддержку Entity Framework. Итак, у меня есть следующие вопросы:
Предоставляет ли драйвер Interbase ADO.NET поддержку Entity Framework? Или я что-то не так делаю?
Возможно, есть какой-нибудь другой драйвер, который поддерживает мою желаемую функциональность?
Любая помощь по этой теме будет принята с благодарностью.
Я также пробовал тот же код, когда использовал базу данных Microsoft SQL Server, которая работала успешно, поэтому я не думаю, что в моем коде вообще что-то не так.
1 ответ
Насколько я знаю, поддержки подключения базы данных Interbase к EF нет. Тем не менее, должна быть возможность написать собственного провайдера на основе рекомендаций EF, которые можно найти здесь.
Для начала вы можете взглянуть на провайдера FireBird (с открытым исходным кодом), который уже работает с EF. Если вы изучите предоставленный код, у вас может быть хороший триггер для написания вашего собственного поставщика Interbase для EF. Ссылку на FireBirds EF .NET Provider можно найти здесь