2012-03-01 3 views
1

У меня есть решение Visual Studio с двумя проектами: MyApp.MvcUI и MyApp.Domain (библиотека классов).EF разрешит мне выбирать SQL Server CE 3.5

MyApp.MvcUI содержит базу данных SQL Server CE 4.

MyApp.Domain должен содержать файл EDMX Entity Framework, но если я его добавлю, у меня нет возможности использовать SQL Server CE 4, только 3.5.

http://www.codetunnel.com/content/images/sqlce35only.jpg

Если я добавляю EDMX в проекте MvcUI то я могу выбрать SQL Server CE 4.

Вопрос

  1. Как я могу поставить свою Entity Framework содержание в проект MyApp.Domain и использовать базу данных SQL Server CE 4, которая живет в проекте MyApp.MvcUI?

  2. Как только я решил эту проблему, какова будет часть источника данных моей строки подключения в App.Config? Я знаю, что строка подключения веб-проекта будет просто выглядеть следующим образом:

    Data Source=|DataDirectory|\CE4DB.sdf 
    

    но то, что будет выглядеть, что в App.Config в проекте MyApp.Domain? Будет ли это абсолютный путь, как

    C:\Code\MyProject\MyApp.MvcUI\App_Data\CE4DB.sdf 
    

Если да, то есть ли способ сделать это относительный путь так, когда люди тянут проект вниз из системы управления он все равно будет работать без коррекции траектории?

ответ

1

Я попробовал предложения здесь. Мой EF был уже на последней версии (4.3 на этом посту), но я установил SQL Server CE через nuget, а также EntityFramework.SqlServerCompact, в котором говорится: «Позволяет SQL Server Compact 4.0 использоваться с Entity Framework». По-прежнему нет возможности использовать CE 4 в мастере при попытке обновить модель EDMX из базы данных. Если это все сделано в проекте MVC, то у меня есть возможность использовать CE 4 в диалоговом окне, изображенном в моем вопросе.

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

<add name="EntityContainer" 
    connectionString="metadata=res://*/Model1.csdl| 
           res://*/Model1.ssdl| 
           res://*/Model1.msl; 
         provider=System.Data.SqlServerCe.4.0; 
     provider connection string=&quot; 
     Data Source=..\MyApp.MvcUI\App_Data\CE4DB.sdf&quot;" 
    providerName="System.Data.EntityClient" /> 

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

Очевидно, что во время выполнения строка подключения в MyApp.Domain не имеет значения, потому что она читается из файла конфигурации активного проекта. В этом случае Web.Config для проекта MvcUI. В которой строка соединения еще проще, поскольку путь упрощен.

<add name="EntityContainer" 
    connectionString="metadata=res://*/Model1.csdl| 
           res://*/Model1.ssdl| 
           res://*/Model1.msl; 
         provider=System.Data.SqlServerCe.4.0; 
     provider connection string=&quot; 
     Data Source=|DataDirectory|\CE4DB.sdf&quot;" 
     providerName="System.Data.EntityClient" /> 
+0

У меня была та же проблема. Я попытался добавить строку подключения к моему app.config, но при добавлении EF-модели я не смог выбрать строку подключения из файла app.config. Поэтому мне пришлось добавить EF-модель и создать новую строку соединения для моего локального SQL-сервера express, и когда спрошено, какие объекты будут отображены, я не выбрал ни одного. Поэтому я получил пустую EF-модель и сохранил строку подключения в своем app.config. Затем я просто изменил строку подключения в app.config, чтобы указать на мою базу данных CE, открыл конструктор EF и обновил из базы данных, и voilá! :-) –

3

Я считаю, что вы должны сделать следующее (что я сделал для моих)

  1. Установить EF 4,1
  2. Установка SQL Server CE 4,0
+0

спасибо! было интересно, можете ли вы помочь с http://stackoverflow.com/questions/9509022/publishing-asp-net-application-to-the-internet#comment12043101_9509022 –

+0

У вас есть это, чтобы работать в библиотеке классов? Я сделал это и многое другое, и мастер все еще показывает, что изображено в моем вопросе. – Chev

+0

Установили ли вы 4.0 runtime для CE? – tsells

0

Я рекомендую используя NuGet загрузить EF , SQL Server CE 4.0 и все необходимые зависимости и автоматически добавлять их в свои проекты.

Это также настроит нужный провайдер в вашей конфигурации приложения, если это отсутствует.

Если вы не знакомы с NuGet, вы можете начать, щелкнув правой кнопкой мыши свой проект в окне проводника решений и выбрав «Добавить библиотечную ссылку». (Возможно, это не точное имя, но его легко найти).

+0

Я использую nuget, и я уже получил EF 4.3. Я не знал, что у них Sql Server Compact. Спасибо. Один вопрос, однако, установить его в проекте Domain (class library) или в веб-проекте? – Chev

+0

Казалось бы, добавление этого в библиотеку классов не помогло. Мастер по-прежнему не позволяет мне выбирать CE 4, как это происходит, когда я помещаю EDMX в веб-проект. Работает в одном проекте, а не в другом. Так странно. Тем не менее, я получил его на работу. Я отправлю его в качестве ответа. – Chev

3

Мастер 4.0 EDMX работает только для веб-проектов, как вы заметили. Вы можете использовать мою надстройку SQL Server Compact Toolbox для создания и 4.0 EDMX в любом типе проекта.

Смежные вопросы