Powinienem napisać to oświadczenie z informacją, że jestem nowy w rozwoju ASP.NET i nie rozumiem kontekstów bazy danych, pomimo spędzania ostatniej godziny na czytaniu dokumentacji. Kiedy zbudowałem moją aplikację ASP.NET MVC 5, wybrałem indywidualne uwierzytelnianie konta użytkownika. Program Visual Studio utworzył plik o nazwie IdentityModels.cs
, w którym zdefiniował klasę ApplicationUser
i klasę ApplicationDbContext
.Zastępowanie automatycznie utworzonego ApplicationDbContext
Zrobiłem trochę prac rozwojowych, a moje kontrolerów CRUD używać ApplicationDbContext
mówić do bazy danych, poprzez tę własność prywatną na każdym kontrolerze:
private ApplicationDbContext db = new ApplicationDbContext();
W działaniach kontrolerów I wtedy robić takie rzeczy jak:
Chcę uporządkować zawartość kontekstu bazy danych, ale najpierw muszę to zrozumieć. Moje główne pytania to:
- Czy można używać tylko jednego kontekstu bazy danych dla całej mojej aplikacji, tak jak teraz? Czy mogę zastąpić klasę
ApplicationDbContext
zdefiniowaną wIdentityModels.cs
moją własną? - Klasa
ApplicationDbContext
wywodzi się zIdentityDbContext<ApplicationUser>
, oznacza to, że powinienem mieć oddzielne konteksty bazy danych dla moich informacji uwierzytelniających użytkownika dostarczonych przez Visual Studio i mój własny kod?
Myślę, że moim celem końcowym jest użycie mojego własnego kontekstu bazy danych o nazwie DatabaseContext
, który jest następnie używany w kontrolerze bazowym, z którego dziedziczą wszystkie moje kontrolery. Wtedy mam tylko jedno miejsce, w którym kontekst bazy danych jest tworzony, zamiast w każdym kontrolerze.
Kto wie, może myślę w niewłaściwy sposób. Każdy wydaje się mieć swój własny preferowany sposób radzenia sobie z tym.
Dziękujemy!
doskonały, dziękuję Alex. :) –
Nie sądzę, że twoje ostatnie zdanie jest poprawne. Jeśli zmienisz wartość ApplicationDbContext na pochodną DbContext, stracisz wszystkie przesłonięcia wykonane w IdentityDbContext, które są niezbędne do prawidłowego funkcjonowania systemu tożsamości. IdentityDbContext zastępuje OnModelCreating, więc istnieje dodatkowy problem: jeśli chcesz zastąpić OnModelCreating w ApplicationDbContext, musisz skopiować nadpisania w IdentityDbContext. https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNet.Identity.EntityFramework/IdentityDbContext.cs –
Powinieneś spojrzeć na ostatnie stwierdzenie w kontekście poprzedniego akapitu: "Domyślnie Asp. Net Identity generuje nową bazę danych dla ciebie i ApplicationDbContext skonfigurowaną do pracy z tą bazą danych.Możesz przechowywać swoje jednostki powiązane z uwierzytelnianiem w dowolnej innej bazie danych, musisz tylko upewnić się, że wszystkie powiązane tabele są tam. rozszerz również tę bazę danych, aby uwzględnić inne tabele używane w aplikacji, aby można było używać tego samego kontekstu wszędzie. " –