2016-04-04 13 views
5

У меня есть актер, что при получении запроса от проекта WebAPI, актер запрашивает таблицу с помощью Entity Framework 6.Использование LocalDB с пакетом ткани

using (var context = new MetadataContext()) 
{ 
    var userStorageAccountId = context.Set<UsersToStorageAccounts>() 
             .Find(userId).StorageAccountId; 
} 

БД был успешно создан с помощью «Add-Migration "..„Update-Database“команды, и имеет следующую строку соединения:

@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFileName=C:\Users\xxxx\Metadata.mdf;Connect Timeout=30;Initial Catalog=Metadata;Integrated Security=True;" 

Когда я бегу службы ткани и актер пытается получить доступ к контексту, я получаю следующее исключение:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 50 - Local Database Runtime error occurred. Cannot create an automatic instance. See the Windows Application event log for error details.)

и ошибка просмотра событий является:

Cannot get a local application data path. Most probably a user profile is not loaded. If LocalDB is executed under IIS, make sure that profile loading is enabled for the current user.

Я искал способ, чтобы загрузить профиль пользователя, но я нашел только решения для IIS.

Пожалуйста, помогите :)

+1

Весь смысл использования Service Fabric - простое развертывание без заботы о сервере. LocalDB (база данных в процессе, которая хранит данные локально) означает, что вы действительно хотите * изменить * сервер и привязаться к нему, так как вы не сможете перейти на другую машину, не теряя ваши данные. И вдобавок ко всему, ваш код использует путь db, указывающий на определенную папку пользователя. –

+4

@PanagiotisKanavos LocalDB используется только для отладки. Если ткань службы работает в среде разработки, используется LocalDB, и если она работает в prod, используется сервер mssql db. Я не могу заставить его работать локально, для целей отладки. – shlatchz

+1

Не используйте его тогда. Service Fabric * не будет * запускаться под вашей учетной записью даже локально, поэтому он * не может * получить доступ к вашему каталогу пользователей. Фактически, ошибка предполагает, что Service Fabric работает под учетной записью, которая просто не разрешает загрузку профиля, т. Е. Не имеет профиля, а не каталога пользователя. * Почему * использовать LocalDB вообще, вместо локальной установки SQL Server?Dev edition бесплатно –

ответ

12

Как сервис работает ткань под другим пользователем, вам нужно разделить базу данных и предоставить NETWORK SERVICE разрешений:

  1. С доля SqlLocalDB.exe командной строки подключение выполнения этой команды:

    sqllocaldb share MSSqlLocalDB SharedDB 
    
  2. Откройте LocalDB с среде SQL Server Management Studio, и перейти к /Безопасность/логинов, добавьте NETWORK SERVICE локальную учетную запись и отображение пользователей добавить его в качестве ПСЭ (dbo.dbowner) к базе данных

  3. Используйте общее имя в строке подключения, как это:

    "Data Source=(localdb)\.\SharedDB;Initial Catalog=[YOUR DB];Integrated Security=SSPI;" 
    

Edit Здесь у вас есть сценарий, я добавил к моим проектам, изменить Имя_базы_данные с именем вашей БД:

sqllocaldb create MSSQLLocalDB 
sqllocaldb start MSSQLLocalDB 
sqllocaldb share mssqllocaldb sharedlocal 
sqllocaldb stop MSSQLLocalDB 
sqllocaldb start MSSQLLocalDB 

"c:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE" -S "(localdb)\.\sharedlocal" -d "databasename" -Q"create login [nt authority\network service] FROM windows with DEFAULT_DATABASE=databasename;use databasename;exec sp_addrolemember 'db_owner', 'nt authority\network service';" 
+0

Это работает для меня. кроме моей строки соединения: «Источник данных = (LocalDb) \. \ SharedDB; Начальный каталог = [ВАША БД]; Интегрированная безопасность = Истина». Спасибо! – tsu1980

+0

Мне также пришлось остановить/запустить экземпляр localdb, чтобы доля вступила в силу. – JohnnyFun

-2

Что касается IIS в службах ткани, я думал, что вы не можете разместить приложение ASP.NET службы ткани в IIS. Вот почему, когда вы создание проекта ASP.NET без гражданства SF, хостинг по умолчанию Owin

+1

Ошибка, которую я получил, не знает, что я пытаюсь запустить LocalDB с Service Fabric, поэтому его предложение не подразумевает, что SF работает с IIS. – shlatchz

+0

Вопрос не подразумевает, что они используют или хотят использовать IIS. Проблема, с которой они сталкиваются, заключается в том, что при запуске кластера Service Fabric на их машине разработки у них возникают проблемы с подключением к базе данных, размещенной на той же машине. –