2011-04-07 13 views
9

Entity Framework 4.1 Code Najpierw działa świetnie z SQLEXPRESS na localhost. Jednak jestem teraz gotowy do połączenia ze standardowym SQL 2008 server.EF 4.1 CF: odmówiono uprawnienia do bazy danych w bazie danych 'master'

  1. Utworzono nową bazę danych "NewEfDatabase".

  2. Następnie zmieniono moją "ApplicationServices" connectionString w Web.config, aby wskazywała na moją nową bazę danych ze zintegrowanymi zabezpieczeniami.

Ale wtedy ten błąd:

"CREATE DATABASE permission denied in database 'master'."

Więc ...

a) Jakie uprawnienia ma EF 4.1 CF musi na wspomniany serwer SQL, aby wykonać swoją pracę ?

b) Czy mogę ustawić pustą bazę danych na SQL 2008 dla EF 4.1 CF, czy też muszę pozwolić, aby wykonała dla mnie wszystkie te czynności? (Nie jestem pewien, że mój DBA ceniłaby pozwalając mój EF aplikację mają prawa do niczego poza konkretnej bazy danych)

Odpowiedz

13

Czy upewnij się, aby ustawić initializer Database do null w kodzie:

Database.SetInitializer<MyDbContext>(null); 

Wszystkie wbudowane implementacje, jeśli inicjator może spróbować upuścić lub utworzyć nową bazę danych. Otrzymany błąd wskazuje, że EF próbował usunąć/utworzyć bazę danych, ale nie ma prawa tego zrobić w instancji SQL Server. Powyższa linia jest jedyną opcją, która pozwala uniknąć tego na ogół i jest dopasowana (nawet absolutnie niezbędna) do środowisk na żywo, gdzie nie chcesz przypadkowego usunięcia (ze względu na zmiany modelu lub coś podobnego).

+0

Nie, nie próbowałem tego. Zrobię to. W takim przypadku należy migrować moje dane i schemat z mojego lokalnego SQLEXPRESS? Pomyślałem, że może zbudować bazę danych w mojej docelowej lokalizacji. Ale zapomniałem o utworzonym kroku upuszczania. –

+1

@Dan: Tak, musisz przeprowadzić migrację bazy danych do instancji docelowej, jeśli ustawisz inicjator na wartość 'null'. W tym przypadku schemat DB i model EF muszą się zgadzać, EF nie zaktualizuje ani nie odtworzy schematu i prawdopodobnie wyrzuci wyjątki, jeśli schemat i model nie pasują do siebie. – Slauma

+1

Sposób, w jaki sobie z tym poradzę, polega na utworzeniu listy nazw komputerów programistów, a ja nazywam tylko SetInitializer (aby ponownie utworzyć bazę danych), jeśli aplikacja działa na jednym z tych komputerów. W przypadku każdego innego komputera zakładam, że baza danych zostanie już tam wdrożona. –

3

Skonfiguruj logowanie do aplikacji na serwerze SQL. Nadaj temu użytkownikowi uprawnienia dbcreator (klikając prawym przyciskiem myszy na login, przejdź do ról serwera i zaznacz pole wyboru "dbcreator").

Powiązane problemy