16

Próbuję użyć SimpleMembership w moim MVC 4 po raz pierwszy i mam już istniejącą bazę danych i model EF5 stworzony na podstawie tego! Dużo szukałem, ale nie mogę znaleźć, jak mogłem go wykorzystać w moim przypadku, a także mieć wszystko pod moim własnym modelem.Używanie MVC 4 SimpleMembership z istniejącą bazą danych - pierwszy model EF

Byłoby wspaniale, gdyby ktoś mógł mi dać pomysł, jak to zrobić.

Dzięki

Odpowiedz

3

W Twojej web.config w tagu appSettings, dodaj linię

<add key="enableSimpleMembership" value="true"/> 

SimpleMembership jest zbudowany w tak stąd wystarczy napisać

[InitializeSimpleMembership] 

powyżej twój public class AccountController: Controller

Gdy chcesz Orce użytkownika, aby zalogować się na pewnej stronie piszesz w kontrolerze

[Authorize] 

Strony tabele zostaną automatycznie wygenerowanego w swojej bazie danych. Jeśli chcesz dodać więcej pól do tych tabel, musisz po prostu google.

Oto link, aby uzyskać więcej informacji http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx

16

wyłącznie jako punkt odniesienia, to może być dobry pomysł, aby utworzyć nowy szablon aplikacji internetowej danego projektu aplikacji ASP.NET MVC 4 Web (czyli poprzez Plik> Nowy projekt).

Jeśli spojrzeć na AccountController, jak mówi @ zms6445, jest on ozdobiony atrybutem InitializeSimpleMembership. Implementację tego atrybutu można znaleźć w pliku InitializeSimpleMembershipAttribute.cs w folderze Filtry w katalogu głównym.

Tutaj brakuje brakującej części układanki - musisz podłączyć istniejącą bazę danych, aby była używana przez SimpleMembershipProvider. Jest to kod trzeba:

private class SimpleMembershipInitializer 
{ 
    public SimpleMembershipInitializer() 
    { 
     try 
     { 
      if (!WebSecurity.Initialized) 
      { 
       WebSecurity.InitializeDatabaseConnection("CONNECTION_STRING_NAME", "USER_TABLE", "USER_ID_FIELD", "USER_NAME_FIELD", autoCreateTables: true); 
      } 
     } 
     catch (Exception ex) 
     { 
      throw new InvalidOperationException("Something is wrong", ex); 
     } 
    } 
} 

kilka rzeczy do uwaga:

  1. CONNECTION_STRING_NAME jest wpis w swoim connectionStrings web.config - nie można użyć ciąg połączenia modelu tutaj - w SimpleMembershipProvider nie rozpoznać ten format! Musisz podać ciąg połączenia System.Data.SqlClient, np.

    < dodaj nazwę = "CONNECTION_STRING_NAME" connectionString = "źródło danych = SERVER, początkowy katalog = DATABASE; identyfikator użytkownika = USER; hasło = PASSWORD;" providerName = „System.Data.SqlClient”/>

  2. USER_TABLE jest tabela w bazie danych do przechowywania dodatkowych informacji użytkownika, takich jak imię, nazwisko itd. Wiąże się to automatycznie wygenerowany tabelach pośrednictwem USER_ID_FIELD.

  3. USER_ID_FIELD jest zwykle kluczem podstawowym w tabeli Użytkownicy. Musi być typu int.

  4. USER_ID_NAME to unikalna nazwa użytkownika, która może być adresem e-mail.

  5. autoCreateTables jest ustawiony na true celu zapewnienia tabele wymagane do SimpleMembership do pracy są tworzone, jeśli nie istnieją.

Oczywiście, ten kod tylko zostanie zwolniony, jeśli trafisz na stronę za pośrednictwem AccountController, ponieważ ten został urządzony przez atrybut. Możesz umieścić tam punkt przerwania i zobaczyć go w akcji.

To powinno wystartować - szablon aplikacji internetowej to całkiem niezły szablon do naśladowania, jeśli utkniesz.

Mam nadzieję, że to pomoże.

+0

Postępowałem zgodnie z twoją instrukcją, ale dostałem wyjątek TargetInvocationException od LazyInitializer. Masz pomysł? –

+1

Znalazłem :) Zapora serwera SQL jest przyczyną tego błędu! Nienawidzę zapór ogniowych :) –

+2

@ UmutCanKöseali Myślę, że mam ten sam problem, w jaki sposób wyłączyć zaporę sql? – Cybercop