Netacademia "Insight sobre o código do curso orientado a objetos na web: o projeto do restaurante"
Felhasználók Webalkalmazás
+----------------------------+ +-------------------------------------------+
| | | |
| +----------------------+ | | Publikus oldalak |
| | Ismeretlen | | | +-----------------------+ |
| | felhasználó | | +-----------------------> | | | |
| | (nem azonosítottuk) | | | | Étlap megtekintése | |
| | | | | | | |
| | | | ^--------------> | | | |
| | | | | | | | |
| +----------------------+ | | | +-----------------------+ |
| | | | |
| | | | |
| | | | |
| | | | Nem publikus oldalak |
| +---------------+------+ | | | +-----------------------+ |
| | Azonosított | | | | | | | |
| | felhasználó |jogok | | | | | Étlap módosítása | |
| | (átment az | | | +--------> ha van joga | | | |
| | azonosításon) | | | | | | | |
| | | | | +--------------> | | | |
| +---------------+------+ | | +-----------------------+ |
| | | |
+----------------------------+ | |
| |
+-------------------------------------------+
Esta não é uma tarefa trivial: identificação e gerenciamento de elegibilidade
A identidade do ASP.NET resolve isso para nós.
C# Project, Application Web ASP.NET (.NET Framework):

Adatbázis Alkalmazás
+------------------------+ +---------------------------+
| | | |
| Text állomány | +-------> | ami az adatokat |
| - csv | | használja |
| | xml | <-------+ | |
| - json | | |
| Komolyabb adatbázis | | |
| -sqlight | | |
| -sql szerver | | |
| | | |
| | | |
| | | |
| | | |
+------------------------+ +---------------------------+
Telepítéskor: egyszerre kell kialakítani az adatbázist és az alkalmazást
a célgépen
A identidade mostra uma solução muito tentadora: eu inicio o álcool e você não precisa de nenhuma instalação, ele cria seu próprio banco de dados em segundo plano.
De alguma forma, ele não cria automaticamente o banco de dados, mas para ter um efeito nele.
Entity Framework
Adatbázis Code First Alkalmazás
+------------------------+Migrations +---------------------------+
| | | |
| -MS SQL Szerver | + | ami az adatokat |
| | | | használja |
| | v | |
| | | |
| | <--------+ | Adatmodell módosítás |
| | | |
| | <--------+ | Adatmodell módosítás |
| | | |
| | <--------+ | Adatmodell módosítás |
| | | |
| | <--------+ | Adatmodell módosítás |
+------------------------+ +---------------------------+
Telepítéskor: Az alkalmazás hozza létre az adatbázist magának
Pré -requisito: a existência do EntityFramework Nuget Pack
licenciamento
PM> enable-migrations
Checking if the context targets an existing database...
Code First Migrations enabled for project OopRestaurant201807.
Isso criou a estação Migrações Configuration.cs .
Pedir um modelo de identidade em uma etapa de migração
PM> add-migration 'Identity datamodel'
Scaffolding migration 'Identity datamodel'.
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration Identity datamodel' again.
A etapa é arbitrária, liguei para 'Datamodel de identidade' para poder identificar esta etapa mais tarde.
Isso criou as migrações 201807050914249_Identity datamodel.cs (e mais dois arquivos técnicos)
Isso é chamado: uma etapa de modificação, etapa de migração. Existem duas partes importantes: UP () e Down () Funções.
Etapa de migração de colocação no banco de dados
PM> update-database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201807050914249_Identity datamodel].
Applying explicit migration: 201807050914249_Identity datamodel.
Ele não é executado primeiro, o motivo é que o Web.Config possui o caminho de acesso a dados que você está procurando. Eu já excluí este arquivo MDF, então não existe tal coisa para que ele se perca. Se você excluir a configuração de conexão de dados do web.config , ele será executado sem problemas.
Cria este banco de dados:

O banco de dados em sua própria máquina é definida na instância SQL padrão e é chamada de DefaultConnection .
Fazemos uma configuração de conexão com https://www.connectionstings.com/.
< connectionStrings >
< add name = " DefaultConnection " connectionString = " Server=.SQLEXPRESS;Database=OopRestaurantDb;Trusted_Connection=True "
providerName = " System.Data.SqlClient " />
</ connectionStrings >É importante inserir o nome do servidor, o nome do banco de dados e o método como o usuário efetua login.
PM> update-database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201807050914249_Identity datamodel].
Applying explicit migration: 201807050914249_Identity datamodel.
Running Seed method.
Se você executar o Database de atualização novamente, você escreve o seguinte:
PM> update-database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
No pending explicit migrations.
Running Seed method.
Portanto, nosso dispositivo conhece a versão modelo, a versão do banco de dados e sabe que nada está faltando.
Você sabe disso com a tabela __migrationhistory.
Os nomes dos arquivos no diretório de migrações contêm as etapas de modificação do banco de dados que estão no código. A tabela __migrationHistory contém as etapas no banco de dados.
Toda a retirada (redefinir para a versão 0)
PM> update-database -t 0
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Reverting migrations: [201807050914249_Identity datamodel].
Reverting explicit migration: 201807050914249_Identity datamodel.
PM>
A -t é uma abreviação para o parâmetro de migração de destino e 0 é o estado antes de cada etapa
PM> update-database -Script
Applying explicit migrations: [201807050914249_Identity datamodel].
Applying explicit migration: 201807050914249_Identity datamodel.
O parâmetro -script não é interrompido, mas mostra o script SQL gerado pela etapa de migração.
A kódban lévő módosító lépések Az adatbázisban lévő módosító lépések
+-------------------------------------+ +---------------------------------+
| | | |
| | A hiányzó lépések | |
| A Migrations mappa alatt lévő | kerülnek az adatbázisba | |
| egyes lépések állományai | | A __MigrationHistory táblában |
| | | lévő sorok |
| | update-database | |
| | | |
| | +---------------------> | |
| | | |
| | Ez a migration step-ben | |
| | lévő köztes nyelvből | |
| | az adatbázisnak megfelelő| |
| | SQL scriptet gyárt, majd | |
| | lefuttatja az SQL | |
| | szerveren | |
| | | |
| | | |
| | | |
| | | |
| ^ | | |
| | | | |
+-------------------------------------+ +---------------------------------+
|
|
+
A modell módosítása után,
az add-migration paranccal készülnek
a módosító lépések
Vimos para o menu Gundel Restaurant e chegamos ao seguinte:
Ao criar nosso próprio modelo, podemos conectá -lo ao banco de dados de identidade usando a classe ApplicondBContext em modelos identityModels.cs.
Se eu trabalho com um banco de dados que perder as etapas, não posso adicionar outra etapa de migração:
PM> add-migration 'add MenuItem table'
Unable to generate an explicit migration because the following explicit migrations are pending: [201807050914249_Identity datamodel]. Apply the pending explicit migrations before attempting to generate a new explicit migration.
Antes de precisar de um Database de atualização :
PM> update-database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201807050914249_Identity datamodel].
Applying explicit migration: 201807050914249_Identity datamodel.
Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.
You can use the Add-Migration command to write the pending model changes to a code-based migration.
A nota é que você não pode alinhar o banco de dados com nosso modelo, porque há uma alteração do modelo que ainda não está em um script de alteração. No entanto, este é apenas um aviso amarelo, reproduzindo a migração no banco de dados para que possamos criar a próxima mudança de banco de dados a partir da mudança do modelo.
PM> add-migration 'add MenuItem table'
Scaffolding migration 'add MenuItem table'.
The Designer Code for this migration file includes a snapshot of your current Code First model. This snapshot is used to calculate the changes to your model when you scaffold the next migration. If you make additional changes to your model that you want to include in this migration, then you can re-scaffold it by running 'Add-Migration add MenuItem table' again.
Em seguida, você pode atualizar o banco de dados com o Atualizar banco de dados.
Podemos retirar a série completa de etapas ou executá -las ao mesmo tempo:
PM> update-database -t 0
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Reverting migrations: [201807051033248_add MenuItem table, 201807050914249_Identity datamodel].
Reverting explicit migration: 201807051033248_add MenuItem table.
Reverting explicit migration: 201807050914249_Identity datamodel.
PM> update-database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201807050914249_Identity datamodel, 201807051033248_add MenuItem table].
Applying explicit migration: 201807050914249_Identity datamodel.
Applying explicit migration: 201807051033248_add MenuItem table.
Running Seed method.
Podemos correr um de cada vez e voltar com estas etapas:
Se eu der o nome do alvo em um banco de dados vazio, as etapas de modificação só serão executadas até então
PM> update-database -t '201807050914249_Identity datamodel'
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201807050914249_Identity datamodel].
Applying explicit migration: 201807050914249_Identity datamodel.
Claro que posso executar os desaparecidos sem um parâmetro
PM> update-database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying explicit migrations: [201807051033248_add MenuItem table].
Applying explicit migration: 201807051033248_add MenuItem table.
Running Seed method.
E posso me retirar para uma versão específica:
PM> update-database -t '201807050914249_Identity datamodel'
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Reverting migrations: [201807051033248_add MenuItem table].
Reverting explicit migration: 201807051033248_add MenuItem table.
Repita
Felhasználó böngésző
SQL ADATBÁZIS ASP.NET MVC szerveralkalmazás (HTML/CSS/JavaScript)
+----------------------------+ +------------------------+ +------------------------+
| | | | | |
| | +--------------> | | +----------------> | |
| | | | | |
| | | | | |
| | <--------------+ | | <----------------+ | |
| | | | | |
| | | | | |
| | | +-------+ +------+ | | |
| | | | | | | | | |
| | | | | <+ | | | | |
| | <--------------+ | | | | | | | |
| | | | | | | | | |
| | | +-------+ +------+ | | |
+----------------------------+ +------------------------+ +------------------------+
^
|
Migrációs +
lépések Adatmodell
Para ler: a lei de vazamento de abstrações
Criamos uma categoria para cada item alimentar. Mas não o colocamos na tabela Menuitems (ou seja, a linha Menuitem), mas enfatizamos em nossa própria dança, o que significa para nossa própria classe.
| Tempo | Nome | Descrição | Preço | Categoria |
|---|---|---|---|---|
| 1 | Trio de peixes -marinhos | Tatar | 7500 | 1 |
| 3 | Panturrilha | Bolinhos | 4500 | 1 |
| Tempo | Categoria |
|---|---|
| 1 | Sopas, aperitivos |
Criamos a classe de categoria e um link da classe Menuitem.
Então essas duas etapas seguem:
PM> add-migration 'add Category table, and MenuItem.Category column'
PM> update-database
Para exibir o menu
Informações do LINQ com esta pesquisa do Google: LINQ 101
| Category.name | Nome | Descrição | Preço |
|---|---|---|---|
| Aperitivos | Trio de peixes -marinhos | Tatar | 7500 |
| Aperitivos | Panturrilha | Bolinhos | 4500 |
Oportunidades:
Categorias
+-------------------------------------------------+ +---------------------------------------+
| | A választott+-----> | |
| | érték +---------------------------------------+
| | | |
| | | +--------------------------------+ |
| +----------------------+ | | |
| Name: | | | | +--------------------------------+ |
| +----------------------+ | A lehetséges | |
| +----------------------+ | értékek +-----> | +--------------------------------+ |
| Description: | | | felsorolása | |
| +----------------------+ | | +--------------------------------+ |
| +----------------------+ | | |
| Price: | | | | +--------------------------------+ |
| +----------------------+ | | |
| | | |
| | | |
| +----------------------+---+ | | |
| Category: | | | | | |
| +----------------------+---+ | | |
| | | |
| | | |
| | | |
| | | |
| +---------+ +---------+ | | |
| | Save | | Cancel | | | |
| +---------+ +---------+ | | |
| | +---------------------------------------+
| |
| |
| |
+-------------------------------------------------+
Requisito de dados para a desconexão exibir:
<-------------------------------------------------^
| |
Adatbázis | EntityFramework | Adatmodell
+---------------------------------------------+ +---------------------------------------+ +-----------------------------+
| | | | +----------------------------------+ | | Attach |
| | | | | DbContext.MenuItems | | <--------------------------^ |
| | | | +----------------------------------+ | | MenuItem | |
| | | | MenuItemEntry | | +------------------+-+ |
| | | | +----------------+ Entry | | | | |
| v | | | | <------------------------+ | |
| | | | | | | | | |
| Categories MenuItems | | | | | | | | |
| +-------------+ +-------------+ | | | | | | | | |
| | | | | | | | | | | | Category | |
| | | | | | | | | | | | +---------------+ | |
| +-------------+ +-------------+ | | | | | | | | | | |
| | Category | <-----+ | MenuItem | | | | | | | | | | | |
| +-------------+ +-------------+ | | | | | | | | | | |
| | | | | | | +-+--------------+ | | | +---------------+ | |
| | | | | | | | | | | | |
| +-------------+ +-------------+ | | | Reference | | | | |
| | | | Load | | | | |
| | | | +-----------+ | | +--------------------+ |
| <----SaveChanges-------------+ +--------> | Category | | | |
| | | +-----------+ | | |
+---------------------------------------------+ +---------------------------------------+ +-----------------------------+
O banco de dados e a entidade "conversas" podem ser incluídos no SQL Server Profiler.
Iniciar o perfil do SQL Server: SQL Server Management Studio Tools SQL Server Profileer
O gerenciamento de dados de identidade do ASP.NET consiste em várias camadas:
+-------------------------------------------------------------+
| |
| |
| |
| |
| +-------------+ +--------------+ +-----------------+ |
| | | | | | | |
| | Adatbázis | | UserStore | | UserManager | <------+
| | | | | | | |
| | | | | | | |
| | | | <-------------+ | |
| | | | | | | |
| | | | | | | |
| | <----------------+ | | | |
| | | | | | | |
| | | | | | | |
| | | | | | | |
| +-------------+ +--------------+ +-----------------+ |
| |
| |
| |
| |
| |
+-------------------------------------------------------------+
< select data-val =" true "
data-val-number =" The field CategoryId must be a number. "
data-val-required =" The CategoryId field is required. "
htmlattributes =" { class = form-control } "
id =" CategoryId " name =" CategoryId " >
< option value ="" > - Válassz egy lehetőséget - </ option >
< option value =" 1 " > Hideg előételek </ option >
< option value =" 2 " > Levesek </ option >
< option value =" 3 " > Meleg előételek </ option >
</ select >O motivo do erro é, portanto, este é
htmlattributes="{ class = form-control }" class="form-control"A solução é copiar o parâmetro a partir da geração de entrada de edição de termo anterior, onde foi dada como um parâmetro AdicionaViewData . Mas @html.dropdownListfor () espera um parâmetro htmlattributes , que está em um formato diferente.
1 selectList, Boolean allowMultiple, IDictionary 2 Htmlattributes) At System.web.mvc.html.selectextensions.dropdownlistfor [TMODEL, TPROPERTY] (htmlhelper`1 htmlhelper, expression`1 expression, ienumerable`1 Selectlist, String OptiBel, Idicctctcticy`2 System.web.mvc.html.selectExtensions.dropdownListFor [tmodel, tpropeerty] (htmlhelper`1 htmlHelper, expressão de expressão, ienumerable`1, objeto htmlatributes) na ASP._PAGE_VIEWS_SHARED_EDITORTEMPLTES_TABLE_CSHTML.EXECUTE () em d: repos ooprestaurant201807 ooprestaurant201807 Views shared editortemplates table.cshtml: line 19 (...) shared editortemplates table.cshtml: line 19 akkor a hiba oka az, hogy a lenyíló adattartalmát (jelen esetben AssignablesLocations nem inicializáltuk)
Diferentes pontos possíveis de validação: válido o aplicativo sempre e proteja o banco de dados sempre que possível!
Felület Alkalmazás Adatbázis
+----------------------+ +-------------------+ +----------------------+
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | +---------------------> | | +--------------------> | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
+----------------------+ +-------------------+ +----------------------+
^ ^ ^
| | |
| | |
+ + +
Validálás Validálás Validálás
+----------------------------------------------------------------------------------------------------------------------+
| Mindenki |
| |
| |
| +-------------------------------------------------------------------------+ |
| | Bejelentkezett felhasználók | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | +----------------------------+ +------------------+ +------------+ | |
| | | Admin | | Pincér | | Szakács | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | Ő mindent tud | | Asztalokat | | Menüt | | |
| | | | | mozgathat | | írhat | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
| | +----------------------------+ +------------------+ +------------+ | |
| | | |
| +-------------------------------------------------------------------------+ |
| |
+----------------------------------------------------------------------------------------------------------------------+
Se você encontrar esse erro depois de baixar o código:
PM> update-database
& : File C:UsersadminReposOopRestaurant201807packagesEntityFramework.6.2.0toolsinit.ps1 cannot be loaded because running scripts is disabled on this system. Fo
r more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:45
+ ... rgs+=$_}; & 'C:UsersadminReposOopRestaurant201807packagesEntity ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
update-database : The term 'update-database' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or
if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ update-database
+ ~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (update-database:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Esta pode ser uma solução:
Set-ExecutionPolicy -Scope CurrentUser Unrestricted
Exit e entrada do Visual Studio, depois reconstrua e atualize-Database.