EF только позволит мне выбрать SQL Server CE 3.5 - PullRequest
1 голос
/ 01 марта 2012

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

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
    

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

Ответы [ 4 ]

3 голосов
/ 01 марта 2012

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

3 голосов
/ 01 марта 2012

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

  1. Установить EF 4.1
  2. Установить SQL Server CE 4.0
1 голос
/ 01 марта 2012

Я попробовал предложения здесь. Мой 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 голосов
/ 01 марта 2012

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

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

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

...