Asp를 만드는 방법에 대한 단계별 가이드입니다.Net Core MVC CRUD, Ef Core 코드 우선 순위 지정
소스 코드: https://github.com/mohamadlawand087/v4-Phonebook
시작하기 전에 세 가지가 필요합니다.
터미널을 열고 다음 명령을 입력하십시오
dotnet --version
지금 우리는 실체 프레임워크 도구를 설치해야 한다dotnet tool install --global dotnet-ef
현재 우리는 asp를 만들어야 한다.net 핵심 응용 프로그램은 다음 명령을 사용합니다dotnet new mvc -n "Phonebook" -lang "C#" -au none
SQLLite와 Entity Framework Core를 사용하기 위해 필요한 패키지를 추가해야 합니다.dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Tools
dotnet add package Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore
패키지를 추가한 후 appsettings를 업데이트해야 합니다.json은 연결 문자열을 데이터베이스에 포함합니다"ConnectionStrings": {
"DefaultConnection": "DataSource=app.db;Cache=Shared"
}
비주얼 스튜디오 코드를 엽니다. 비주얼 스튜디오 코드에서 터미널을 열어야 합니다.너는 풍경을 보러 갈 수 있다⇒ 종착역.현재 우리는 프로그램이 구축되고 있는지 확인하기 위해 아래 코드를 실행해야 한다dotnet build
dotnet run
프로그램이 실행 중임을 확인하면 Application DbContext 생성부터 시작합니다.루트 디렉터리에 데이터 폴더를 만들고 ApplicationDbContext 클래스를 만들어야 합니다using Microsoft.EntityFrameworkCore;
namespace Phonebook.Data
{
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
}
Application DbContext를 추가한 후, DbContext를 사용하기 위해 startup 클래스를 업데이트해야 합니다services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlite(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDatabaseDeveloperPageExceptionFilter();
DbContext 중간부품을 추가한 후 데이터베이스를 만들기 위해 초기 마이그레이션을 추가해야 합니다.dotnet ef migrations add "Initial Migrations"
dotnet ef database update
이제 우리 해결 방안을 점검하고 데이터베이스 파일을 만들었는지 확인해 봅시다. 우리는 지금 데이터베이스가 거기에 있는 것을 볼 수 있습니다.그래서 우리의 다음 단계는 우리의 모델을 만드는 것이다. 우리는 접촉이라고 부른다.
모델 폴더에 새 C# 클래스를 생성하여 Contact 라고 합니다. Contact 클래스에서는 5가지 속성 "Id", "First Name", "Last Name", "Email", "Mobile"을 정의합니다.
public class Contact
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Mobile { get; set; }
}
이제 다음 코드를 추가하여 응용 프로그램 DbContext에 모델을 추가해야 합니다public class ApplicationDbContext : DbContext
{
// The DbSet property will tell EF Core tha we have a table that needs to be created
public virtual DbSet<Contact> Contacts { get; set; }
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
// On model creating function will provide us with the ability to manage the tables properties
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
Application DbContext를 업데이트한 후 EF Core를 준비하여 데이터베이스를 업데이트하는 새로운 마이그레이션 스크립트를 만들어야 합니다.dotnet ef migrations add "Adding the Contact table"
dotnet ef database update
데이터베이스 업데이트가 끝난 후에 우리는 sqlite 브라우저를 사용하여 sqlite 데이터베이스를 검사할 수 있다. 우리는 테이블이 이미 우리를 위해 만들어진 것을 볼 수 있다.이제 컨트롤러를 만들고 동작을 만들어야 합니다.Controller 폴더를 오른쪽 단추로 눌러서 Contacts Controller라는 새 클래스를 추가합니다. controller 클래스에서 계승해야 합니다.
public class ContactsController : Controller
{
}
새 연락처 컨트롤러에서 Application DbContext를 만들고 시작하며 조작 인덱스를 만들고 데이터베이스에서 모든 연락처를 가져와야 합니다public class ContactsController : Controller
{
private ApplicationDbContext _context;
public ContactsController(ApplicationDbContext context)
{
_context = context;
}
public async Task<IActionResult> Index()
{
var contacts = await _context.Contacts.ToListAsync();
return View(contacts);
}
}
컨트롤러를view 폴더로 만들어야 합니다.views 폴더 아래Contacts라는 폴더를 만들어야 합니다.폴더를 만들면 색인에 대한 보기를 만들어야 합니다. 색인에 표를 만들어야 합니다. 이 표는 우리가 가지고 있는 모든 연락처를 보여 줍니다.
@model List<Phonebook.Models.Contact>
<div class="row">
<div class="col-md-12">
<a asp-action="Create" asp-controller="Contacts" class="btn btn-success">Create</a>
</div>
</div>
<div class="row">
<div class="col-md-12">
<table class="table">
<thead>
<tr>
<td>First Name</td>
<td>Last Name</td>
<td>Email</td>
<td>Mobile</td>
<td>Manage</td>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.FirstName</td>
<td>@item.LastName</td>
<td>@item.Email</td>
<td>@item.Mobile</td>
<td>
<a asp-action="Edit" asp-controller="Contacts" asp-route-id="@item.Id">
Edit
</a>
<a asp-action="Delete" asp-controller="Contacts" asp-route-id="@item.Id">
Delete
</a>
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
일단 우리가 그것을 만들면, 모든 것이 제대로 실행될 수 있도록 프로그램을 구축하고 실행해야 한다dotnet build
dotnet run
Contacts Controller로 넘어가면, 기록이 추가되지 않았기 때문에, 올바른 행동입니다. 이제 창설 작업을 시작하여 데이터베이스에 정보를 추가합니다.[HttpGet]
public IActionResult Create()
{
return View();
}
[HttpPost]
public async Task<IActionResult> Create(Contact contact)
{
// validate that our model meets the requirement
if (ModelState.IsValid)
{
try
{
// update the ef core context in memory
_context.Add(contact);
// sync the changes of ef code in memory with the database
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
catch(Exception ex)
{
ModelState.AddModelError(string.Empty, $"Something went wrong {ex.Message}");
}
}
ModelState.AddModelError(string.Empty, $"Something went wrong, invalid model");
// We return the object back to view
return View(contact);
}
@model Phonebook.Models.Contact
<form asp-action="Create" asp-area="Contacts" method="post">
<div class="row">
<div class="col-lg-12">
<div class="form-group">
<label>First Name:</label>
<input asp-for="FirstName" type="text" class="form-control required" placeholder="Enter first name" tabindex="1">
</div>
<div class="form-group">
<label>Last Name:</label>
<input asp-for="LastName" type="text" class="form-control required" placeholder="Enter last name" tabindex="2">
</div>
<div class="form-group">
<label>Email:</label>
<input asp-for="Email" type="text" class="form-control required" placeholder="Enter email" tabindex="3">
</div>
<div class="form-group">
<label>Mobile:</label>
<input asp-for="Mobile" type="text" class="form-control required" placeholder="Enter mobile" tabindex="4">
</div>
<div class="form-group">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
<div class="card-footer">
<center>
<button type="submit" class="btn btn-primary">Create Contact</button>
<a asp-action="Index" asp-controller="Contacts" class="btn btn-secondary">Cancel</a>
</center>
</div>
</div>
</div>
</form>
일단 우리가 그것을 만들면, 모든 것이 제대로 실행될 수 있도록 프로그램을 구축하고 실행해야 한다dotnet build
dotnet run
창설 페이지로 이동해서 기록을 추가합니다. 데이터베이스에서 데이터를 채우고 있는 것을 볼 수 있습니다현재 우리는 연락처를 업데이트하기 위해 편집 기능을 추가해야 한다. 이를 위해 편집 작업과 편집 보기를 추가해야 한다.
[HttpGet]
public async Task<IActionResult> Edit(int id)
{
var exist = await _context.Contacts.Where(x => x.Id == id).FirstOrDefaultAsync();
return View(exist);
}
[HttpPost]
public async Task<IActionResult> Edit(Contact contact)
{
// validate that our model meets the requirement
if (ModelState.IsValid)
{
try
{
// Check if the contact exist based on the id
var exist = _context.Contacts.Where(x => x.Id == contact.Id).FirstOrDefault();
// if the contact is not null we update the information
if(exist != null)
{
exist.FirstName = contact.FirstName;
exist.LastName = contact.LastName;
exist.Mobile = contact.Mobile;
exist.Email = contact.Email;
// we save the changes into the db
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
}
catch(Exception ex)
{
ModelState.AddModelError(string.Empty, $"Something went wrong {ex.Message}");
}
}
ModelState.AddModelError(string.Empty, $"Something went wrong, invalid model");
return View(contact);
}
@model Phonebook.Models.Contact
<form asp-action="Edit" asp-area="Contacts" method="post">
<input type="hidden" asp-for="Id" />
<div class="row">
<div class="col-lg-12">
<div class="form-group">
<label>First Name:</label>
<input asp-for="FirstName" type="text" class="form-control required" placeholder="Enter first name" tabindex="1">
</div>
<div class="form-group">
<label>Last Name:</label>
<input asp-for="LastName" type="text" class="form-control required" placeholder="Enter last name" tabindex="2">
</div>
<div class="form-group">
<label>Email:</label>
<input asp-for="Email" type="text" class="form-control required" placeholder="Enter email" tabindex="3">
</div>
<div class="form-group">
<label>Mobile:</label>
<input asp-for="Mobile" type="text" class="form-control required" placeholder="Enter mobile" tabindex="4">
</div>
<div class="form-group">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
<div class="card-footer">
<center>
<button type="submit" class="btn btn-warning">Update Contact</button>
<a asp-action="Index" asp-controller="Contacts" class="btn btn-secondary">Cancel</a>
</center>
</div>
</div>
</div>
</form>
이제 애플리케이션을 실행하고 기능을 테스트해 보겠습니다.dotnet build
dotnet run
마지막으로, 연락처를 삭제할 수 있도록 삭제 작업과 보기를 추가해야 합니다
[HttpGet]
public async Task<IActionResult> Delete(int id)
{
var exist = await _context.Contacts.Where(x => x.Id == id).FirstOrDefaultAsync();
return View(exist);
}
[HttpPost]
public async Task<IActionResult> Delete(Contact contact)
{
if (ModelState.IsValid)
{
try
{
var exist = _context.Contacts.Where(x => x.Id == contact.Id).FirstOrDefault();
if(exist != null)
{
_context.Remove(exist);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
}
catch(Exception ex)
{
ModelState.AddModelError(string.Empty, $"Something went wrong {ex.Message}");
}
}
ModelState.AddModelError(string.Empty, $"Something went wrong, invalid model");
return View();
}
@model Phonebook.Models.Contact
<form asp-action="Delete" asp-area="Contacts" method="post">
<input type="hidden" asp-for="Id" />
<div class="row">
<div class="col-lg-12">
<div class="form-group">
<label>First Name:</label>
<input asp-for="FirstName" type="text" disabled class="form-control required" placeholder="Enter first name" tabindex="1">
</div>
<div class="form-group">
<label>Last Name:</label>
<input asp-for="LastName" type="text" disabled class="form-control required" placeholder="Enter last name" tabindex="2">
</div>
<div class="form-group">
<label>Email:</label>
<input asp-for="Email" type="text" disabled class="form-control required" placeholder="Enter email" tabindex="3">
</div>
<div class="form-group">
<label>Mobile:</label>
<input asp-for="Mobile" type="text" disabled class="form-control required" placeholder="Enter mobile" tabindex="4">
</div>
<div class="form-group">
<div asp-validation-summary="All" class="text-danger"></div>
</div>
<div class="card-footer">
<center>
<button type="submit" class="btn btn-danger">Delete Contact</button>
<a asp-action="Index" asp-controller="Contacts" class="btn btn-secondary">Cancel</a>
</center>
</div>
</div>
</div>
</form>
이제 어플리케이션을 실행하고 기능을 테스트해 보겠습니다.dotnet build
dotnet run
우리가 해야 할 마지막 일은 메뉴에 연락처 페이지의 링크를 추가하는 것이다. 이 점을 하려면 보기로 넘어가야 한다⇒ 공유⇒ _배치.cshtml 다음 코드 추가<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-controller="Contacts" asp-action="Index">Contacts</a>
</li>
Reference
이 문제에 관하여(Asp를 만드는 방법에 대한 단계별 가이드입니다.Net Core MVC CRUD, Ef Core 코드 우선 순위 지정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/moe23/step-by-step-guide-on-how-to-create-an-asp-net-core-mvc-crud-ef-core-code-first-approach-4kl1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)