Использование EF Code First и SqlCe в WPF - PullRequest
5 голосов
/ 23 января 2011

Я пытаюсь использовать EF Code First с моим приложением WPF, идея состоит в том, чтобы создать SqlCe Db в AppData / MyApp (если его нет) и использовать его с EF Code First.

В данный момент выдает ошибку, когда я пытаюсь прочитать данные из базы данных, которую он должен создать, но когда я проверил объект контекста db, я увидел, что он пытается создать его в SqlExpress.

Прежде всего, как я могу настроить его на работу с CE вместо SqlExpress и указать местоположение файла?

Я попытался изменить строку подключения в app.config, но не смог заставить его работать (он не создал файл sdf), а также я не уверен, как установить путь строки подключения к папке AppData, так как она находится в User папка (не фиксированная).

Никогда не работал с SqlCe или EF Code Сначала, поэтому любая помощь приветствуется и приветствуется.

Заранее спасибо.

Ответы [ 4 ]

6 голосов
/ 03 марта 2011

Мне удалось заставить его работать после долгих суеты.Мой app.config имеет следующее:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
  </configSections>

  <connectionStrings>
    <add name="Database"
         connectionString="Data Source=Database.sdf"
         providerName="System.Data.SqlServerCe.4.0" />
  </connectionStrings>

  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.4.0" />
      <add name="Microsoft SQL Server Compact Data Provider 4.0"
           invariant="System.Data.SqlServerCe.4.0"
           description=".NET Framework Data Provider for Microsoft SQL Server Compact"
           type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
    </DbProviderFactories>
  </system.data>

</configuration>

Наличие там DbProviderFactory поможет, когда дело доходит до развертывания.Это позволит пользователям использовать SQLCE 4 без запуска инсталлятора для него (при условии, что вы также предоставите родные бинары, некоторую информацию здесь: http://erikej.blogspot.com/2011/02/using-sql-server-compact-40-with.html).

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

Это, вероятно, не поможет в краткосрочной перспективе, но я думаю, что это будет лучшим решением в долгосрочной перспективе. Я не смог найти, где кто-то еще задокументировал, как это сделать, так что, думаю, мне придется разобраться с этим по ходу дела, если кто-то с более глубокими знаниями об использовании SqlCE4, CodeFirst и создании пакетов NuGet не сравнится с Это. Нам нужен пакет NuGet, либо новый пакет, либо сделайте существующий достаточно умным, чтобы справиться с ним, который может добавить SqlCE4 и CodeFirst в проект WPF и / или WinForms.

Существующий пакет, похоже, ориентирован на веб-проекты, поскольку он зависит от WebActivator. Из того, что я могу сказать, установка WebActivator на не-веб-проект действительно не подходит. Я не знаю, возможно ли для пакета NuGet определить тип проекта и выполнить другую логику установки на основе этой информации. Для тех, кто отвечает за поддержку пакета EFCodeFirst.SqlServerCompact, лучше всего выпустить не-веб-версию или сделать существующую более умную.

В ожидании этого, в свободное время я посмотрю, смогу ли я выяснить, как это сделать и создать свое собственное. Я не могу обещать, сколько времени это займет у меня, потому что я почти полностью в неведении относительно создания пакетов NuGet. Я создал несколько действительно простых, но никогда не делал ничего более сложного, например, преобразования конфигурации и тому подобное.

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

Я не думаю, что инструмент готов для SQLCE для проектов WPF. Это также остановило меня в моих следах.

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

Вот возможная подсказка. Если вам нужно было установить EFCodeFirst.SqlServerCompact с помощью диспетчера пакетов NuGet и посмотреть по адресу: Visual Studio 2010 \ Projects \ MyProject \ packages \ EFCodeFirst.SqlServerCompact.0.8.8482 \ Content, для вашего веб-приложения это работает так:

public static class AppStart_SQLCEEntityFramework {
    public static void Start() {
        DbDatabase.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");

        // Sets the default database initialization code for working with Sql Server Compact databases
        // Uncomment this line and replace CONTEXT_NAME with the name of your DbContext if you are 
        // using your DbContext to create and manage your database
        //DbDatabase.SetInitializer(new CreateCeDatabaseIfNotExists<CONTEXT_NAME>());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...