Entity Framework 4 и SQL Compact 4: как создать базу данных? - PullRequest
27 голосов
/ 05 марта 2011

Я занимаюсь разработкой приложения с Entity Framework 4 и SQL Compact 4 с использованием подхода Model First. Я создал свой EDM, и теперь я хочу создать базу данных SQL Compact 4.0, которая будет служить хранилищем данных для модели. Я вызываю Мастер создания базы данных и нажимаю кнопку Новое соединение , чтобы создать соединение для сгенерированного файла. Появится диалоговое окно Выбор источника данных , но SQL Compact 4.0 не указан в списке доступных источников данных:

enter image description here

Я использую VS 2010 SP1 (бета) и установил VS 2010 Tools для SQL Compact 4.0. Я могу создать соединение данных SQL Compact 4.0 из обозревателя серверов. Только в Мастер создания базы данных опция 4.0 не отображается. Кстати, моя установка SQL Compact 4.0 включает System.Data.SqlServerCe.Entity.dll. Поэтому у меня должны быть нужные компоненты SQL Compact.

Я что-то делаю неправильно, или это ошибка? У кого-нибудь есть исправление или обходной путь? Спасибо за вашу помощь.

Ответы [ 7 ]

34 голосов
/ 06 марта 2011

В качестве обходного пути я использую Мастер создания базы данных для создания сценария SQL Compact 3.5, который я использую для пустой базы данных SQL Compact 4.0, созданной в VS 2010 Solution Explorer.Вот шаги для выполнения этой задачи:

Шаг 1: Запустите Мастер создания базы данных .Он запрашивает создание файла на своей первой странице, поэтому он должен создать файл SQL Compact 3.5.Этот файл является фиктивным, поэтому не имеет значения, как его назвать.

Шаг 2: Завершите работу мастера, чтобы создать сценарий DDL, который настроит новую базу данных.

Шаг 3: Удалите фиктивный файл, созданный на шаге 1.

Шаг 4: Используйте обозреватель серверов VS 2010 для создания фактического SQL Compact4.0 файл, который вы будете использовать в своем проекте.

Шаг 5: Мастер создания базы данных помещает две ссылки на SQL Compact "3.5" в файл EDMX;эти ссылки должны быть изменены на «4.0».Откройте файл EDMX в редакторе XML VS 2010 (щелкните правой кнопкой мыши и выберите «Открыть с помощью», чтобы перейти в редактор XML).Строка 7 должна содержать ссылки «3.5».Измените их на «4.0» и сохраните файл.

Шаг 6: Откройте сгенерированный файл сценария EDMX.SQLCE в VS 2010. VS будет показывать (через баннер через нижнюю частьрабочая область), что сценарий отключен.Щелкните правой кнопкой мыши пустое пространство над баннером и выберите Соединение> Соединить в появившемся контекстном меню.Откроется диалоговое окно подключения - используйте его для подключения сценария к базе данных SQL Compact 4.0, созданной на шаге 4.

Шаг 7: Щелкните правой кнопкой мыши по сценарию.снова пробел и выберите Выполнить SQL из контекстного меню.Сценарий будет выполнен, и вы получите обычное сообщение с результатами в области под сценарием.При условии успешного выполнения база данных затем настраивается в соответствии с моделью данных сущностей.

Шаг 8: Мы также должны убедиться, что App.config / web.config не указывает на фиктивнуюфайл.Если это так, измените его на фактический файл CE 4.0, созданный на шаге 4 выше.Иначе у нас возникают проблемы с обновлением скрипта, когда мы вносим изменения в модель.В файле конфигурации также измените 3.5 на 4.0.

В этот момент вы сможете использовать Entity Framework 4 для работы с вашей базой данных.

2 голосов
/ 06 марта 2011

Чтобы ответить на комментарии ниже и обратиться к ним в соответствии с: http://blogs.msdn.com/b/sqlservercompact/archive/2011/01/12/microsoft-sql-server-compact-4-0-is-available-for-download.aspx

Эти мастера не работают.

Дизайнеры в проектах VB или C # Windows в бета-версии Visual Studio 2010 с пакетом обновления 1 (SP1): Следующие мастера не работают с Compact 4.0 в системе проектов Windows. Разработчики могут вручную добавить ссылку на поставщика ADO.NET для Compact 4.0 (System.Data.SqlServerCe) для разработки программ для Compact 4.0 в проектах Windows:

  1. Мастер настройки источника данных, который используется для настройки наборов данных.
  2. Мастер настройки конфигурации данных, который используется для настройки синхронизации данных и схемы с SQL Server с использованием Sync FX.
  3. Мастер Entity Data Model, который используется для создания сущностей из компактной базы данных.

Вот приемлемые способы решения этих проблем. http://erikej.blogspot.com/2010/11/using-entity-framework-with-sql-server.html

1 голос
/ 19 декабря 2011

Вы можете использовать IDatabaseInitializer и создать базу данных в коде, используя

if (File.Exists("Test.sdf"))
    File.Delete("Test.sdf");

string connStr = "Data Source = Test.sdf; Password = <password>";

SqlCeEngine engine = new SqlCeEngine(connStr);
engine.CreateDatabase();
engine.Dispose();

SqlCeConnection conn = null;

try {
    conn = new SqlCeConnection(connStr);
    conn.Open();

    SqlCeCommand cmd = conn.CreateCommand();
    cmd.CommandText = "CREATE TABLE myTable (col1 int, col2 ntext)";
    cmd.ExecuteNonQuery();

catch {
finally {
    conn.Close();

http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceengine(v=vs.80).aspx

1 голос
/ 05 марта 2011

Насколько я понимаю, текущая версия VS 2010 не поддерживает SQL CE 4.0. Он должен быть включен в VS 2010 SP1 (в настоящее время в бета-версии). Отметьте в этом блоге , в котором также описано использование модели EF с SQL CE 4.0 в пакете обновления 1 (SP1).

Edit:

Я нашел этот обходной путь .

0 голосов
/ 13 сентября 2012

Вероятно, вам понадобятся также инструменты SQL Server Compact 4 , если они не устанавливались напрямую при установке Visual Studio 2010 SP1, вы можете установить их. Это то, что сработало для меня, когда у меня возникла проблема.

0 голосов
/ 06 марта 2011

Я могу запустить Мастер создания базы данных без каких-либо проблем из моего проекта Chinook.Data, убедитесь, что в вашем app.config есть правильная строка подключения. http://erikej.blogspot.com/2010/11/using-entity-framework-with-sql-server.html

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="ChinookEntities" connectionString="metadata=res://*/ChinookModel.csdl|res://*/ChinookModel.ssdl|res://*/ChinookModel.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;Data Source=C:\projects\Chinook\Chinook40.sdf&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>
0 голосов
/ 06 марта 2011

Еще один, используйте инструмент базы данных WebMatrix.

Microsoft WebMatrix

...