Entity Framework с подключением OleDB - я просто чокнутый? - PullRequest
6 голосов
/ 15 июля 2009

Я экспериментирую с 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 ]

15 голосов
/ 16 июля 2009

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

НО ...

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

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

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

Алекс

(Entity Framework Team, Microsoft)

1 голос
/ 15 июля 2009

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

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

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

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

1 голос
/ 15 июля 2009

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

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

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

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

0 голосов
/ 11 ноября 2014

Возможно, 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...