2014-09-03 2 views
3

Я разрабатываю облачную службу с использованием Azure Mobile Services, и для ее быстрого тестирования и ее отладки я хочу развернуть ее на локальном компьютере. Я выбираю проект, нажимаю F5, запустил его в IIS express на своем локальном ПК. Выполнения Cliente против моего локального адреса URI службы IIS и при попытке вставить значение, это исключение возникает при попытке извлечь или вставить новый объект:Разработка с Azure Mobile Services на локальном компьютере [.Net backend]

An exception of type 'System.ArgumentException' occurred in EntityFramework.SqlServer.dll but was not handled in user code 

Additional information: The database name 'TR_MyTrip_Server_ExtraData_Service]_Persons_InsertUpdateDelete' is invalid. Database names must be of the form [<schema_name>.]<object_name>.

Я отлаженный Инициализация контроллера и выяснили, что мобильные услуги развертывает экземпляр LocalDB с этой информацией соединения на DataBase свойстве ServiceContext объекта:

Data Source=(localdb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-MyTrip.Server.ExtraData.Service-20140731060708.mdf;Initial Catalog=aspnet-TestProject.Server.ExtraData.Service-20140731060708;Integrated Security=True;MultipleActiveResultSets=True 

это не в состоянии найти эту базу данных, если я пытаюсь соединиться с этим Строка подключения к LocalDB через SQL Management Studio

Я нахожусь в состоянии получить доступ к экземпляру LocalDB со студией управления SQL эта команда используется на CMD и получения соединения для LocalDB

SqlLocalDB.exe info v11.0 

Eitherway, на SQL Management Studio я не вижу никакой базы данных, связанной с моим контроллером мобильных служб. Я искал в google, и единственная связанная ссылка, которую я нашел, была this, но не работает ... Кто-нибудь знает, что происходит?

Спасибо большое

ответ

16

Это проблема, когда у вас есть имя проекта с периодами в нем. Как и TestProject.Server.ExtraData.Service.

Чтобы исправить это, зайдите в web.config и отредактируйте приложение appsetting с именем «MS_MobileServiceName», извлекая периоды. Это значение, используемое в качестве имени схемы SQL для ваших таблиц мобильных сервисов в базе данных. В нем не могут быть периоды или другие специальные символы.

Обычно я пытаюсь сделать это так же, как имя мобильной службы, к которой я буду развертываться, но это не требуется технически.

+1

Un freakin реальный! Огромное спасибо. Я провел весь день, создавая и воссоздавая и тестируя, и не мог понять, что это за ошибка. Они действительно должны помешать вам вставить периоды или по крайней мере очистить значение имени службы в webconfig. – jmichas

+0

Фернандо, отметьте это как ответ. – jmichas

+0

Привет, я тестировал его и действительно работал! Ты так много для ответа! Это могло бы быть, если, как говорит jmichas, они мешают вам создавать периоды ... – toroveneno

2

По какой-то причине я не мог получить эту работу, используя принятый ответ. Я предполагаю, что это имеет отношение к отказу от ответственности в web.config, который гласит:

После публикации в Mobile Services эти параметры будут переопределены значениями, указанными на портале.

Однако, я нашел другую работу по файлу MobileServiceContext, где я заменил эту строку:

string schema = ServiceSettingsDictionary.GetSchemaName(); 
if (!string.IsNullOrEmpty(schema)) 
{ 
    modelBuilder.HasDefaultSchema(schema); 
} 

с простым строковым значением modelBuilder.HasDefaultSchema('mySchema');

Я полагаю, что есть способ влиять на выход от GetSchemaName(), но, учитывая, сколько усилий потребовалось для решения этой проблемы, я доволен этим решением на данный момент.

+0

FYI, после установки обновлений Azure SDK вчера и передислокации моего приложения мобильной связи, я начал получать дубликаты таблиц в своей базе данных. В дополнение к схеме, указанной в вызове 'HasDefaultSchema', я также имел те же таблицы в схеме' dbo'; даже таблица '__MigrationHistory' была дублирована. На данный момент я удалил вызов 'HasDefaultSchema' и принимаю' dbo' по умолчанию. –

2

Если вы изменили MS_MobileServiceName в конфигурации, чтобы удалить периоды, и вы по-прежнему получаете сообщение об ошибке, вам необходимо повторно запустить подмости для начальной миграции в консоли менеджера пакетов:

Add-Migration Initial -Force

Из того, что я мог видеть, строительные леса создают встроенный .resx, который по-прежнему имеет ваше прежнее имя схемы (DefaultSchema) и моментальный снимок (Target), на который ссылается код разработчика. Простое изменение DefaultSchema не решило проблему для меня, но повторное использование лесов.

Я также добавил аннотации к моим моделям, но я не думаю, что это было проблемой. И, вероятно, это не идеально, если ваша служба уже жива.

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