Как использовать существующую базу данных для создания лесов в Visual Studio Code
Если вы хотите повторно использовать существующую базу данных, вы можете сделать это, как показано ниже:
Убедитесь, что вы добавили эти необходимые инструменты / пакеты.
- инструмент
dotnet-ef
: dotnet tool install --global dotnet-ef
- другие связанные пакеты:
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.VisualStudio.Web.CodeGeneration.Design
Если вы используете 3.1, вы можете установить этот пакет по ссылке.
нажмите клавишу Ctrl + ` в пределах VSCode
, чтобы открыть терминал:
> cd <the-folder-of-your-proj>
> dotnet add package Microsoft.EntityFrameworkCore.Design --version 3.1.*
> dotnet add package Microsoft.EntityFrameworkCore.SqlServer --version 3.1.*
> dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design --version 3.1.*
и используйте команду dotnet ef dbcontext scaffold
для эшафот существующая база данных:
dotnet ef dbcontext scaffold -c MyDbContext "your-connection-string" Microsoft.EntityFrameworkCore.SqlServer -o Models
, а затем файл MyDbContext
и некоторые файлы сущностей создаются в папке Models/
.
Перемещение ConnectionStrings
из исходного кода в файлы конфигурации.
3.1 Очистите метод OnConfiguring () в MyDbContext
:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
<strike>if (!optionsBuilder.IsConfigured)
{
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.
optionsBuilder.UseSqlServer("your-connection-string");
}</strike>
}
3.2 Добавьте строку подключения к appsettings.Development.json
. Например:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
<b>"ConnectionStrings": {
"MyDbContext": "Server=(localdb)\\mssqllocaldb;Database=MyApp;Trusted_Connection=True;MultipleActiveResultSets=true"
}</b>
}
(обратите внимание, здесь мы используем double sla sh (\\
), чтобы показать, что \
экранирован. Это отличается от команды powershell с 1-м шагом.)
Наконец, добавьте сервис DbContext
в свой Startup :: ConfigureServices ():
services.AddDbContext<MyDbContext>(opts=>{
opts.UseSqlServer(Configuration.GetConnectionString("MyDbContext"));
});
или Как я могу сделать то же самое, что и учебник?
Если вы пытаетесь создать новый проект в VSCode
, вызовите dotnet new mvc
для создания приложения. Не забудьте добавить инструменты / пакеты, о которых мы говорили выше. А затем вызовите dotnet aspnet-codegenerator
для генерации контроллера / просмотров / страниц, как показано ниже:
dotnet aspnet-codegenerator controller -m $model -dc $dcClass -name $controllerName -namespace $controllerNamespace -outDir Controllers --useDefaultLayout
Здесь
$model
- это название вашей модели $dcClass
- это имя вашего класса DbContext $controllerName
- это имя вашего контроллера $controllerNamespace
- это пространство имен
Эта команда также добавит новый DbContext, если $dcClass
не существует. Не стесняйтесь обновлять строки подключения в application.json
. (В этом случае не забудьте вызвать dotnet ef migrations add initial
&& dotnet ef database update
для синхронизации c БД перед запуском приложения MVC)
Эта команда утомительна. Поэтому я написал команду powershell, чтобы упростить мою работу:
param (
[Switch]$api = $false ,
[string]$model = $(Read-Host "Model Name(without namespace)")
)
if( [string]::IsNullOrEmpty($model) ) {
Write-Host "you need specify the model name (without a namespace)"
exit
}
function Prompt-Parameter{
param (
[Parameter(Mandatory=$true)] [string] $message,
$defaultValue
)
$result = Read-Host "Press enter $message (default value ['$defaultValue'])"
if([String]::IsNullOrEmpty($result) )
{
$result = $defaultValue
}
return $result
}
Write-Host "[+]set class name:"
$controllerName= $(Prompt-Parameter "Controller Name(without namespace)" -defaultValue "$($model)Controller")
$dcName= $(Prompt-Parameter "DbContext Name (without namespace)" -defaultValue "AppDbContext")
Write-Host "[+]set namespace:"
$rootNamespace = $( Prompt-Parameter -message "ROOT namespace" -defaultValue "App")
$controllerNamespace= $(Prompt-Parameter "namespace of Controller" -defaultValue "$rootNamespace.Controllers")
$modelNamespace = $(Prompt-Parameter "namespace of Model" -defaultValue "$rootNamespace.Models")
$dcNamespace= $(Prompt-Parameter "namespace of DbContext" -defaultValue "$rootNamespace.Data")
$modelClass = "$modelNamespace.$model"
$controllerClass = "$controllerNamespace.$controllerName"
$dcClass = "$dcNamespace.$dcName"
Write-Host $rootNameSpace
Write-Host $modelClass
Write-Host $controllerClass
Write-Host $dcClass
# whether to generate a controller with views or an ApiController
$apiSwitch = if($api) {"-api"} else {""}
dotnet aspnet-codegenerator controller $apiSwitch -m $model -dc $dcClass -name $controllerName -namespace $controllerNamespace -outDir Controllers --useDefaultLayout
С помощью этого dotnet-controller-generate.ps1
я могу сгенерировать контроллеры / представления для модели с помощью:
dotnet-controller-generate.ps1 TheModelName
Создать WebAPI для модель по:
dotnet-controller-generate.ps1 -api TheModelName