2013-04-08 7 views
5

Właśnie wdrożyłem nową aplikację w ASP.Net MVC 4. Używam SQL Server 2008 R2 (NOT SQL Express).Błąd automatycznego tworzenia pliku bazy danych SQL Server Express w MVC 4 - Ale NIE chcę używać SQL Server Express

To działało dobrze przez pierwsze 10 minut, potem zrobiłem małą zmianę kodu i ponownie go wdrożyłem.

Teraz, gdy próbuję uzyskać dostęp do strony, która korzysta SimpleMembership, otrzymuję ten błąd:

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: 26 - Error Locating Server/Instance Specified)

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

SQLExpress database file auto-creation error:
The connection string specifies a local Sql Server Express instance using a database location within the application's App_Data directory. The provider attempted to automatically create the application services database because the provider determined that the database does not exist. The following configuration requirements are necessary to successfully check for existence of the application services database and automatically create the application services database:

Ale robię nie używać SQL Server Express. W moim web.config mam ustawić wszystkie ciągi połączeń w następujący sposób:

<add name="ApplicationServices" 
    connectionString="Server=myServer;Database=myDB;User Id=myUserID;Password=myPWD;" 
    providerName="System.Data.SqlClient" /> 

<add name="ApplicationServices" 
    connectionString="Server=myServer;Database=myDB;User Id=myUserID;Password=myPWD;" 
    providerName="System.Data.SqlClient" /> 

Dlaczego próbować stworzyć EXPRESS bazy danych SQL Server?

+0

Nazwa ciągu połączenia musi być taka sama jak kontekst bazy danych. Zobacz http://stackoverflow.com/questions/5346926/code-first-specify-database-name – AaronLS

+1

Niestety, mogłem źle zrozumieć twój problem. Zakładałem, że najpierw używasz kodu EF. – AaronLS

+1

rozwiązałeś to? Mam dokładnie ten sam błąd ... – Chatumbabub

Odpowiedz

4

Nadal masz ten problem? Ponadto, dlaczego usługi ApplicationServices są wymienione dwa razy?

Wpadłem na to samo co chwilę. Brakuje mi konfiguracji w web.config dla członkostwa i ról.

<membership defaultProvider="AspNetSqlMembershipProvider"> 
    <providers> 
    <clear /> 
    <add name="AspNetSqlMembershipProvider" 
     type="System.Web.Security.SqlMembershipProvider" 
     connectionStringName="ApplicationServices" 
     enablePasswordRetrieval="false" 
     enablePasswordReset="true" 
     requiresQuestionAndAnswer="false" 
     requiresUniqueEmail="false" 
     maxInvalidPasswordAttempts="5" 
     minRequiredPasswordLength="6" 
     minRequiredNonalphanumericCharacters="0" 
     passwordAttemptWindow="10" 
     applicationName="Test" /> 
    </providers> 
</membership> 
<roleManager enabled="true" defaultProvider="SqlRoleManager"> 
    <providers> 
    <add name="SqlRoleManager" 
     type="System.Web.Security.SqlRoleProvider" 
     connectionStringName="ApplicationServices" 
     applicationName="Test" /> 
    </providers> 
</roleManager> 
4

Gdy napotkałem ten błąd, okazało się to proste. W końcu zorientowałem się, że w moim _Layout.cshtml odwoływałem się do User.IsInRole("role"), ale po Request.isAuthenticated. Mój kod wyglądał trochę jak @if (Request.isAuthenticated && User.IsInRole("role")). Zasadniczo, jeśli nie byłbym podpisany na stronie głównej, renderowałbym, ponieważ nie przeszedłby on do wywołania IsInRole() (które wymaga inicjalizacji zwykłego członkostwa, w przeciwnym razie dostałbym błąd, o którym wspomniałeś tutaj.) Tak więc zasadniczo musiałem to zapewnić każdy kontroler, który wykorzystuje się widok, który rozciąga plik _Layout i mogło nieuwierzytelnionych użytkowników, musi mieć [InitializeSimpleMembership]. Albo jeden z wielu sposobów można zainicjować Proste członkostwa.

Więc coś

namespace ProjectName.Controllers 
{ 
    [InitializeSimpleMembership] 
    public class HomeController : Controller { 
... 

Również często Ctrl + F5, aby uruchomić aplikację, a następnie użyć "Rebuild Solution" po. Kiedy odświeżyłem stronę, która nie była root strona główna, dostałbym błąd, dopóki nie zadzwonię do głównej strony głównej. W tym momencie wszystko znowu zacznie działać.

Mam nadzieję, że to pomoże tobie lub komuś. Waliłem głową o co najmniej godzinę lub dwie.