Вопрос

Я не могу заставить Entity Framework работать с SQL Azure.Это только мне кажется или это не предназначено для совместимости?(Я пробовал оригинальную версию EF с VS2008, а также более позднюю бета-версию VS2010 2)

Чтобы проверить это, я создал самый простой из возможных сценариев.Добавьте одну таблицу в локальный экземпляр SQL Server 2008.Таблица состоит из двух столбцов: первичного ключа типа integer и столбца string.Я добавляю в таблицу одну строку со значениями (1, foobar).Затем я добавил точно такую же настройку в свою базу данных SQL Azure.

Создал консольное приложение и сгенерировал EF-модель из локальной базы данных.Запустите приложение, и все будет хорошо, единственная строка может быть возвращена из тривиального запроса.Обновите строку подключения для подключения к SQL Azure, и теперь это не удается.Он подключается к базе данных SQL Azure без проблем, но запрос завершается ошибкой при обработке результата.

Я отследил первоначальную проблему, используя информацию об исключении.Концептуальная модель имела атрибут Schema="dbo", установленный для набора сущностей моего единственного определенного объекта.Я удалил этот атрибут, и теперь он завершается с другой ошибкой...

"Invalid object name 'testModelStoreContainer.Test'."

Где 'Test' - это, конечно, имя объекта, который я определил, и поэтому похоже, что он пытается создать объект на основе возвращаемого результата.Но по какой-то неизвестной причине не удается реализовать этот тривиальный сценарий.

Итак, либо я совершаю действительно фундаментальную ошибку, либо SQL Azure несовместим с EF?И мне это кажется просто безумием.Я хочу использовать EF в моей веб-роли, а затем RIA-сервисы для клиентской части Silverlight.

Это было полезно?

Решение

Хотя я сам этого не делал, я почти уверен, что члены команды EF сделали, как и Кевин Хоффман.

Так что, вероятно, вы просто сбились с пути на одном этапе процесса переноса.

Похоже, вы пытались обновить EDMX (XML) вручную с того, который работает с локальной базой данных.

Если вы сделаете это, большая часть изменений потребуется в элементе StorageModel в EDMX (он же SSDL).Но похоже, что вы вносили изменения в элемент ConceptualModel (он же CSDL).

Я предполагаю, что вам просто нужно заменить все ссылки на схему dbo в SSDL на любую схему, которая является схемой SQL Azure.

Надеюсь, это поможет

Алекс

Другие советы

Чтобы ответить на главный вопрос - Да, по крайней мере, Entity Framework v4 можно использовать с SQL Azure - я, честно говоря, не пробовал с начальной версией (из .Net Framework 3.5.СП 1).

Некоторое время назад я сделал полный проект и написал в блоге об этом опыте: http://www.sanderstechnology.com/?p=9961 Надеюсь, это может немного помочь!

Документация Microsoft по Windows Azure содержит Как сделать:Подключитесь к базе данных SQL Windows Azure с помощью ADO.NET Entity Framework.

После создания вашей модели в этих инструкциях описывается, как использовать SQL Azure с Entity Framework:

  1. Перенесите базу данных школы в базу данных SQL, следуя инструкциям в Как сделать:Перенесите базу данных с помощью мастера создания сценариев (база данных SQL Windows Azure).

  2. В Школьное приложение проект, откройте App.Конфигурация файл.Измените строку подключения таким образом, чтобы она подключалась к вашей базе данных SQL.

    <connectionStrings>
        <add name="SchoolEntities"
             connectionString="metadata=res://*/SchoolDataModel.csdl|res://*/SchoolDataModel.ssdl|res://*/SchoolDataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=<provideServerName>.database.windows.net;Initial Catalog=School;Integrated Security=False;User ID=<provideUserID>;Password=<providePassword>;MultipleActiveResultSets=True;Encrypt=True;TrustServerCertificate=False&quot;"
             providerName="System.Data.EntityClient"/>
    </connectionStrings>
    
  3. Нажмите F5, чтобы запустить приложение в вашей базе данных SQL.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top