одновременное подключение SqlConnection и EntityConnection к локальному серверу Sql Express

Я использую Linq2Entity для большинства операций с базой данных. Однако для создания базы данных, создания таблиц и ввода исходных данных я использую простые файлы SQL. Поэтому мне нужны как SqlConnection, так и EntityConnection. К сожалению, Entity Framework начинает жаловаться на то, что сервер Sql не прослушивает другой конец канала.

Я не уверен, в чем проблема, это может быть связано с пользовательским экземпляром. Очистка пула SqlConnection или удаление экземпляра соединения не помогает.

Я использую следующую строку подключения:

«Источник данных =. \ SQLEXPRESS; Исходный каталог = dbname; Integrated Security = SSPI;»

Обновить:

Я пытался использовать EntityConnection для обслуживания базы данных, но у меня возникли проблемы. Я не могу использовать EntityConnection для создания баз данных и удаления баз данных. Следующий синтаксис не поддерживается для EntityConnection, но отлично работает для SqlConnection to ms SQL Express.

CREATE DATABASE silverfit ON ( NAME = silverfit, FILENAME = 'c:\silverfit\silverfit.mdf' );

Также по какой-то причине EntityConnection не позволяет мне изменять базы данных, что необходимо для удаления базы данных. Боюсь, мне все еще нужен SqlConnection для создания базы данных и таблиц ..

Есть ли способ сосуществования SqlConnections и EntityConnections для локальных баз данных ms SQL Express?

Спасибо, Воутер


person Wouter    schedule 05.02.2009    source источник


Ответы (5)


Вы пробовали создать SqlConnection, который затем передаете конструктору для вашего EntityConnection? Одна из перегрузок для EntityConnection принимает MetadataWorkspace и DbConnection (от которого происходит SqlConnection). Небольшой недостаток этого заключается в том, что вы должны создать MetadataWorkspace вручную, в котором собраны файлы .csdl, .ssdl и .msl, которые определяют ваши Рабочее пространство. Однако в конечном итоге вы должны иметь возможность использовать одно соединение как для выполнения запросов DML, так и для использования Entity Framework.

person jrista    schedule 06.06.2009
comment
Это на самом деле похоже на мое решение, за исключением того, что я позволил конструктору EntityConnection создать SqlConnection, а затем получить его с помощью свойства StoreConnection. - person Thomas Levesque; 06.06.2009

Я не согласен с тем, что вам нужно простое соединение SQL и соединение Entity для этой задачи, по крайней мере, как вы это описали. Вы можете выполнить SQL, используя соединение Entity. Посмотрите на EntityConnection.CreateDbCommand. Естественно, здесь есть опасность, что вы выполняете специфичные для сервера БД вещи на экземпляре, не относящемся к серверу БД, например EntityConnection. Но в этом случае, вероятно, лучше иметь отдельное соединение.

person Craig Stuntz    schedule 05.02.2009
comment
да, к сожалению, мне нужны серверные команды для создания таблиц и т. д. - person Wouter; 10.06.2009

Вы пытались использовать EntityConnection.StoreConnection для получения SqlConnection и выполнения с ним команд?

person Thomas Levesque    schedule 06.06.2009
comment
Я хотел бы создать базу данных и таблицы в ней с помощью SqlConnection. EntityConnection не позволит мне подключиться, если база данных еще не существует. - person Wouter; 10.06.2009

Если вы пытаетесь прикрепить файл базы данных к SQL Server Express во время выполнения, что кажется так, как будто вы это делаете, то одновременно с ним может быть открыто только одно соединение. Это проблема для других вещей, а не только для того, чего вы пытаетесь достичь. Скажем, например, вы подключаетесь к 'c: \ silverfit \ silverfit.mdf' через обозреватель сервера в VS и пытаетесь открыть одну из таблиц в базе данных. После открытия таблицы попробуйте запустить приложение. Будет бомба.

Однако, если вы откроете SQL Management Studio Express (вы можете загрузить его здесь), а затем присоедините базу данных к SQL Server, проблемы, с которыми вы столкнулись, должны исчезнуть. На этом этапе вы должны иметь возможность открывать несколько подключений к своей базе данных через SQLConnection или EntityConnection.

Присоединение вашей базы данных во время выполнения к механизму SQL Server Express действительно хорошо работает только для демонстрационных целей или проверки концепций.

person Joseph    schedule 08.06.2009

Поддерживает ли ADO.NET соединение с базой данных через пул соединений? Попробуйте добавить Pooling = False в строку подключения, так как это может позволить закрыть базу данных до того, как вы ее удалите.

person Jeremy McGee    schedule 08.06.2009