목차

  • 테이블 생성
  • Model 생성
  • DI 주입
  • Select, Insert , Update, Delete 생성
    • 어트리뷰트(Attribute)

 

테이블 생성

손수 한땀 한땀 작성한 테이블 생성 쿼리다. 난 소문자가 좋더라

create table Member(
MemberSeq int primary key identity(1,1),
Name varchar(100),
Gender int, 
BirthDay varchar(8),
Morph varchar(100),
Memo varchar(1000),
MotherSeq int ,
FatherSeq int,
CreateTime datetime
)

create table Growth(
MemberSeq int,
GrowthInfoJson varchar(max),
UpdateTime datetime
)

create table Payment(
MemberSeq int,
TransactionType int,
PaymentTime datetime,
Price int
)

create table Img(
MemberSeq int,
TopImg varchar(100),
LeftImg varchar(100),
RightImg varchar(100),
BackImg varchar(100),
FaceImg varchar(100),
AfarTopImg varchar(100),
AfarLeftImg varchar(100),
AfarRightImg varchar(100),
AfarBackImg varchar(100),
AfarFaceImg varchar(100),
ImgTime datetime
)

 

모델 생성

Table 필드 그대로 모델로 진화

    public class Member
    {
        public Member()
        {
            Name = string.Empty;
            BirthDay = string.Empty;
            Morph = string.Empty;
            Memo = string.Empty;
        }

        public int MemberSeq { get; set; }
        public string Name { get; set; }
        public int Gender { get; set; }
        public string BirthDay { get; set; }
        public string Morph { get; set; }
        public string Memo { get; set; }
        public  int MotherSeq { get; set; }
        public int FatherSeq { get; set; }
        public DateTime CreateTime { get; set; }
    }

DI 주입

DbConnection 클래스를 생성하고 전역 필드 생성

  • IConfiguration  : appsettings.json 파일을 읽어와서 사용할 수 있음

GetConnectoin() 메서드를 만듬, [대답해 게코] 애플리케이션의 appsettings.json 파일을 불러와서 DB 연결시키는 메서드

	public class DbConnectoin 
	{
		private readonly IConfiguration _config;

		public DbConnectoin(IConfiguration config)
		{
			_config = config;
		}

		public IDbConnection GetConnection(string conn = "GeckoCareDb")
		{
			return new SqlConnection(_config.GetConnectionString(conn));
		}
	}

 

환경설정 파일이고 Logging은 Defalut 값이고 밑에 Connection 부분이 추가한 값임

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ConnectionStrings": {
    "GeckoCareDb": "Server=127.0.0.1;Database=test;Trusted_Connection=True"
  }
}

 

다시 GetConnection 메서드는 appsettings.json 파일에서 "GeckoCareDb" 값을 불러와서 연결 시키는 메서드

자! 이제 DbConnection 클래스를 DI 주입 할 거임

[대답해 게코] 애플리케이션 program.cs 에다가 아래처럼 추가 할거임

"builder.Services.AddScoped<DbConnectoin>();" 이부분 

DI는 클래스 내부가 아닌 외부에서 객체를 생성한 후 그 객체를 제공하는 기술

using Gecko_Care.Util;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Services.AddScoped<DbConnectoin>(); 

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();

 

Select , Insert , Update , Delete

앞전에 DI를 통해 DbConnectoin 클래스를 주입 받았다. 주입 받은 클래스의 GetConnection() 메서드를 통해 DB 연결 까지 적용한 코드

		private readonly DbConnectoin _dbContext;

        public DataController(DbConnectoin dbContext)
        {
            _dbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
        }
        
        [HttpGet]
        public async Task<IActionResult> SelectMember(string name)
        {
            try
            {
                using IDbConnection db = _dbContext.GetConnection();

                IEnumerable<Member> memberResult = await db.QueryAsync<Member>(Query.Query.SelectMember, new { name });

                if (memberResult.Count() > 0)
                {
                    return Ok(memberResult);
                }
                else
                {
                    return BadRequest("Failed Select");
                }
            }
            catch (Exception ex)
            {
                return BadRequest($"Error: {ex.Message}");
            }
        }

        [HttpPost]
        public async Task<IActionResult> InsertMember(Member member)
        {
            try
            {
                using IDbConnection db = _dbContext.GetConnection();

                int result = await db.ExecuteAsync(Query.Query.InsertMember, new { member.Name, member.Gender, member.BirthDay, member.Morph, member.Memo, member.MotherSeq, member.FatherSeq });

                if (result > 0)
                {
                    return Ok("Good Insert");
                }
                else
                {
                    return BadRequest("Failed Insert");
                }
            }
            catch (Exception ex)
            {
                return BadRequest($"Error: {ex.Message}");
            }
        }

        [HttpPut]
        public async Task<IActionResult> UpdateMember(Member member)
        {
            try
            {
                using IDbConnection db = _dbContext.GetConnection();

                int result = await db.ExecuteAsync(Query.Query.UpdateMember, new { member.Name, member.Gender, member.BirthDay, member.Morph, member.MotherSeq, member.FatherSeq, member.MemberSeq });

                if (result > 0)
                {
                    return Ok("Good Update");
                }
                else
                {
                    return BadRequest("Failed Update");
                }
            }
            catch (Exception ex)
            {
                return BadRequest($"Error: {ex.Message}");
            }
        }

        [HttpDelete]
        public async Task<IActionResult> DeleteMember(int seq)
        {
            try
            {
                using IDbConnection db = _dbContext.GetConnection();

                int result = await db.ExecuteAsync(Query.Query.DeleteMember, new { seq });

                if (result > 0)
                {
                    return Ok("Good Delete");
                }
                else
                {
                    return BadRequest("Failed Delete");
                }
            }
            catch (Exception ex)
            {
                return BadRequest($"Error: {ex.Message}");
            }

        }

 

어트리뷰트(Attribute)

  • .NET에서 컴파일, 런타임시 특성이나 동작을 갖는지 제어하는데 사용
  • 대괄호 안에 작성되며 이를 통해 요소에 관련된 정보를 제공하거나 특정한 동작을 부여 할 수 있음

아래 빨간색으로 표시한 부분이 어트리뷰트 

  • [HttpGet] => 데이터 조회
  • [HttpPost] => 데이터 생성
  • [HttpPut] => 데이터 수정
  • [HttpDelete] => 데이터 삭제

이 처럼 메서드 상단에 어트리뷰트를 선언해주면 .NET 에서 해당 메서드의 용도를 어트리뷰트로 정의 합니다.

그러면 [HttpGet] 어트리뷰트를 2개 이상 사용해야 할 때는 어떻게 해야 할까

아래 처럼 어트리뷰트에 라우팅 값을 설정해주면 된다.

[HttpGet] 뿐만이 아니고 나머지 어트리뷰트에도 사용 가능하다. 

 

 

'Project > 대답해 게코' 카테고리의 다른 글

[대답해 게코] API 호출  (0) 2023.08.07
[대답해 게코] 프로젝트 소개 및 ERD  (0) 2023.08.01