Entity Framework с подключением OleDB - я просто чокнутый?

Я экспериментирую с Entity Framework и хочу подключиться к базе данных Access 2007.

Следующий код основан на http://msdn.microsoft.com/en-us/library/system.data.entityclient.entityconnection.connectionstring.aspx

Я подозреваю, что у меня не тот конец палки...

OleDbConnectionStringBuilder oledbConn = new OleDbConnectionStringBuilder();

oledbConn.DataSource = @"..\..\..\..\Pruebas.accdb"; //yep Access 2007!

EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder ();
entityBuilder.Provider = "Microsoft.ACE.OLEDB.12.0";
entityBuilder.ConnectionString = oledbConn.ToString();
EntityConnection ec = new EntityConnection(entityBuilder.ToString());
ec.Open();
ec.Close();

EntityConnectionStringBuilder говорит мне, что он не поддерживает свойство DataSource. Я могу нормально подключиться к ADO.net, поэтому я знаю, что путь и провайдер верны.

Это просто неправильный подход?

4 ответа

Решение

Подход, который вы используете для построения строки соединения EF, является правильным.

НО...

Entity Framework работает только с провайдерами (например, SqlClient), которые поддерживают так называемые сервисы провайдеров.

Поставщик OleDB не поддерживает "Услуги провайдера", поэтому вы не можете использовать EF с OleDb (если вы не можете найти стороннего поставщика OleDb с поддержкой EF).

Надеюсь это поможет

Alex

(Entity Framework Team, Microsoft)

Я не уверен, что у вас есть любой конец палки.:)

Проверьте этот пример вместо этого. С вашим кодом могут быть другие проблемы, но похоже, что вы устанавливаете свойство ConnectionString строителя сущностей, когда вам нужно установить его свойство ProviderConnectionString (среди других свойств).

Мне кажется, что для чего-то, называемого "компоновщик строки соединения", свойство ConnectionString должно быть доступно только для чтения (это не так). Я предполагаю, что он также предназначен для парсера строки соединения.

Изменить: Я только что посмотрел на ваш код снова, и я думаю, что все, что вам нужно сделать, это изменить ConnectionString на ProviderConnectionString. Вы можете иметь палку в конце концов!

Чтобы создать строку подключения, создайте на рабочем столе файл с именем a.udl.

Двойной щелчок по нему, должен открыть пользовательский интерфейс. Следуйте указаниям мастера, проверьте соединение.

Затем закройте интерфейс, откройте файл с помощью блокнота, и вы получите строку подключения.

РЕДАКТИРОВАТЬ Возможно, вы получаете эту ошибку, потому что вы пропускаете ссылку. Entity Framework использует методы расширения. Следовательно, он может компилироваться, но все равно не работает.

Возможно, OleDb не работает с EF, но инициализация работает нормально, если вы установите таким образом entityBuilder и oledbConn.

        OleDbConnectionStringBuilder oledbConn = new OleDbConnectionStringBuilder();
        oledbConn.Provider = "Microsoft.Jet.OLEDB.4.0";
        oledbConn.DataSource = @"C:\Users\Utente\Documents\visual studio 2013\Projects\How to implement the1\Debug\Test.mdb";

        EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
        entityBuilder.Provider = "System.Data.EntityClient";
        string connectionString = string.Format("metadata=res://*/School.csdl|res://*/School.ssdl|res://*/School.msl;provider=System.Data.OleDb;provider connection string='{0}'", oledbConn);
        entityBuilder.ConnectionString = connectionString;
        EntityConnection ec = new EntityConnection(entityBuilder.ToString());
        ec.Open();
        ec.Close();
Другие вопросы по тегам