ASP.NET 6.0에서 Entity Framework 없이 CRUD 작업을 수행하는 OData
9060 단어 webapientityframeworkodatadotnet
이 자습서에서는 Entity Framework 없이 CRUD 작업을 수행하지 않고 odata 끝점을 노출하는 방법을 설명합니다.
OData는 데이터를 끝점까지 가져오는 기본 개념이 최종 사용자에게 완전히 추상적인 곳에서 데이터를 가져올 수 있는 일련의 데이터 액세스 메커니즘을 허용하는 데이터 원본 또는 끝점입니다.
Entity Framework 및 Odata와 강력한 관계가 없습니다.
준비
프로젝트 만들기
dotnet new webapi -o ODataWithoutEf
dotnet new sln
dotnet sln add ODataStudent
종속성 추가
프로젝트를 데이터베이스에 연결
다음 스키마로 데이터베이스를 생성합니다.
데이터베이스 이름: ODataStudent
테이블 이름: 학생
열 이름:
여기에서 우리가 데이터베이스를 생성한 이전 자습서를 볼 수 있습니다. 이 자습서에서는 동일한 데이터베이스가 사용됩니다.
Models
폴더를 만듭니다. 같은 폴더에 Student.cs
파일을 만듭니다.namespace ODataWithoutEF.Models
{
public class Student
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
}
Models 폴더에서
ContextDb.cs
파일을 만듭니다. 이것은 리포지토리로 작동하며 컨트롤러를 통해 데이터를 제공합니다.using System.Data;
using System.Data.SqlClient;
namespace ODataWithoutEF.Models
{
public class ContextDb
{
string conn = "Data Source=(localdb)\\mssqllocaldb; Database=ODataStudent;Trusted_Connection=True;MultipleActiveResultSets=True";
public List<Student> GetStudent()
{
List<Student> list = new List<Student>();
string query = "Select * from Students";
using (SqlConnection con = new SqlConnection(conn))
{
using (SqlCommand cmd = new SqlCommand(query))
{
cmd.Connection = con;
SqlDataAdapter adp = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
adp.Fill(dt);
foreach (DataRow dr in dt.Rows)
{
list.Add(new Student { Id=Convert.ToInt32(dr[0]), FirstName= Convert.ToString(dr[1]), LastName = Convert.ToString(dr[2]) });
}
}
}
return list;
}
public bool Add(Student obj)
{
string query = "insert into Students values('" + obj.FirstName + "','" + obj.LastName + "')";
using (SqlConnection con = new SqlConnection(conn))
{
using (SqlCommand cmd = new SqlCommand(query))
{
cmd.Connection = con;
if (con.State == ConnectionState.Closed)
con.Open();
int i = cmd.ExecuteNonQuery();
if (i >= 1)
{
return true;
}
else
{
return false;
}
}
}
}
public bool Edit(int id, Student obj)
{
string query = "update Students set FirstName= '" + obj.FirstName + "', LastName='" + obj.LastName + "' where Id='" + id + "' ";
using (SqlConnection con = new SqlConnection(conn))
{
using (SqlCommand cmd = new SqlCommand(query))
{
cmd.Connection = con;
if (con.State == ConnectionState.Closed)
con.Open();
int i = cmd.ExecuteNonQuery();
if (i >= 1)
{
return true;
}
else
{
return false;
}
}
}
}
public bool DeleteStudent(int id)
{
string query = "delete Students where Id='" + id + "'";
using (SqlConnection con = new SqlConnection(conn))
{
using (SqlCommand cmd = new SqlCommand(query))
{
cmd.Connection = con;
if (con.State == ConnectionState.Closed)
con.Open();
int i = cmd.ExecuteNonQuery();
if (i >= 1)
{
return true;
}
else
{
return false;
}
}
}
}
}
}
API 컨트롤러 만들기
Controllers 폴더에
StudentsController.cs
파일을 생성합니다.using Microsoft.AspNet.OData.Routing;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.OData.Query;
using Microsoft.AspNetCore.OData.Routing.Controllers;
using ODataWithoutEF.Models;
// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
namespace ODataWithoutEF.Controllers
{
public class StudentsController : ODataController
{
ContextDb db = new ContextDb();
[EnableQuery]
public IEnumerable<Student> Get()
{
return db.GetStudent().ToList();
}
[HttpGet(nameof(GetById))]
public IEnumerable<Student> GetById(int Id)
{
var result = db.GetStudent().Where(model => model.Id == Id);
return result;
}
public void Post([FromBody] Student obj)
{
if (ModelState.IsValid == true)
{
db.Add(obj);
}
else
{
}
}
[HttpPut("{id}")]
public void Put(int id, [FromBody] Student obj)
{
if (ModelState.IsValid == true)
{
db.Edit(id, obj);
}
}
[HttpDelete("{id}")]
public void Delete(int id)
{
if (ModelState.IsValid == true)
{
db.DeleteStudent(id);
}
}
}
}
GetEdmModel()
함수에서 모델을 등록합니다. 하나의 개체 ODataConventionModelBuilder 클래스를 만들고 등록하기만 하면 됩니다.using Microsoft.AspNetCore.OData;
using Microsoft.OData.Edm;
using Microsoft.OData.ModelBuilder;
using ODataWithoutEF.Models;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
static IEdmModel GetEdmModel()
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Student>("Students");
return builder.GetEdmModel();
}
builder.Services.AddControllers().AddOData(opt => opt.AddRouteComponents("odata",GetEdmModel()).Select().Filter().Count().SetMaxTop(25));
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Postman에서 API 테스트
ID와 이름으로 학생 가져오기:
https://localhost:7275/odata/Emps?$Select=Id,FirstName
저장소
여기에서 소스 코드를 확인할 수 있습니다.
OData-without-Entity-framework
계속 배우도록!
감사합니다
이 글이 도움이 되었기를 바라며, 자유롭게 아이디어를 공유하거나 이 기사에 댓글을 달아주세요. 여러분의 생각이나 질문이 있으면 저에게 알려주세요!
Reference
이 문제에 관하여(ASP.NET 6.0에서 Entity Framework 없이 CRUD 작업을 수행하는 OData), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/renukapatil/odata-without-entity-framework-in-aspnet-60-and-performing-crud-operations-39li텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)