[C# 강좌 - 71] Entity framework에서 mysql(mariaDB) 를 사용하기


Study/C#  2019. 7. 3. 09:00

안녕하세요. 명월입니다.


이 글은 C#의 Entity framework에서 mysql(mariaDB)를 사용하는 방법에 대한 글입니다.


C#을 프로그래밍 하면 기본적으로 데이터 베이스는 mssql를 많이 사용합니다. mssql은 express 버전으로 무료가 있긴 하지만 제대로 배포 프로그램을 만든다고 하면 standard 버젼을 사용해야 합니다.

standard 버젼은 무료가 아닙니다. 그래서 많은 서비스가 무료 데이터 베이스인 postgre나 mariaDB를 많이 사용할 것입니다.

※참고로 mysql은 현재 oracle에서 개인이 사용하면 무료지만 배포판은 유료이기 때문에 mysql도 유료 프로그램입니다. mysql과 mariaDB는 비슷하지만 다른 데이터 베이스입니다.


개인적으로 저는 postgre보다는 mariaDB를 선호합니다. 이유는 postgre는 기본적인 기능이 매우 많지만 데이터가 조금만 쌓여도 무겁고 응답이 느려지는 느낌이 있어서 좀 가볍고 빠른 mariaDB를 선호합니다.

언젠간 mariaDB와 postgre 성능 차이 테스트를 해봐야 겠네요.


다른 사람은 어떠실지 모르겠으나 제 개인 프로그램의 데이터 베이스 기반은 대부분 mariaDB이기 때문에 mariaDB에 맞추어서 entity framework를 설정해 보겠습니다.


먼저 mariaDB를 visual studio에 사용하기 위해서는 애드온을 먼저 설치해야 합니다.

링크 - https://dev.mysql.com/downloads/windows/visualstudio/2.0.html

         https://dev.mysql.com/downloads/connector/net/

※(2019년 7월 2일기준) 다운로드 버전을 보면 더 상위 버전이 있습니다. 8.0도 있고 6.10.X도 있고.. 그런데 다른 버젼은 제 기준에 제대로 작동을 안하네요.

비주얼 스튜디오가 다운되지 않나.. 위자드가 꺼지지 않나... 아마 버그가 있는 듯합니다.

참고 - https://pie001.github.io/entry/blog/0033/


이분은 버전을 일치하라고 하였는데.. 저는 위 블로그를 따라가도 에러가 나네요..

그냥 6.9.12 버전을 다운로드하고 설치하면 됩니다.


필요한 커넥터와 애드온을 설치했으면 Visual studio를 실행해서 프로젝트를 하나 열겠습니다.


그럼 필요한 라이브러리를 Nuget을 통해 다운로드하겠습니다.

여기서 중요한 것은 Mysql.Data 라이브러리를 다운로드 받을 때, 최신 버젼이 아니고 반드시 「6.9.12」를 다운 받아야 합니다. 안그럼 버그가 발생합니다.

Mysql.Data.Entity도 「6.9.12」버전을 다운받습니다.


그러면 아마도 Entity Framework가 의존성 라이브러리이기 때문에 자동으로 「6.0.0」 버전이 다운로드 받아 질 것입니다. 최신 버전으로 업그레이드 하면 에러가 발생합니다.

그대로 「6.0.0」 버전을 사용하면 됩니다.

CREATE DATABASE EFExample;
use EFExample;
 
create table Test1(
  idx int auto_increment primary key,
  data varchar(255),
  createddate datetime,
  isdeleted bit
);
 
create table Test2(
  idx int auto_increment primary key,
  fidx int,
  data varchar(255),
 
  foreign key(fidx) references Test1(idx)
);

어제와 같은 구조의 테이블을 mariaDB에도 생성합니다.


다시 Visual studio로 돌아와서 Entity Data Model를 만듭니다.

그리고 database connection 타입을 mssql에서 mysql로 변경합니다.

데이터 베이스의 Connection 정보를 입력합니다.

연결이 완료가 되면 클래스가 자동으로 생성이 되고 ER 다이어그램 같은 표시가 화면에 나타납니다.


이제 값을 하나 Insert해 보고 출력까지 해보겠습니다.

class Program
{
  static void Main(string[] args)
  {
    // entity framework의 context를 가져온다.
    using (var context = new efexampleContext())
    {
      //Test1 테이블에 데이터를 하나 추가한다.
      context.test1.Add(new test1()
      {
        //data 컬럼에 hello world를 넣는다.
        data = "Hello world",
        // Referection 테이블 Test2에 data에 "reference Test"를 넣는다.
        test2 = new List<test2>(){
          context.test2.Add(new test2()
          {
            data = "reference Test"
          })
        }
      });
      context.SaveChanges();
    }
    Console.WriteLine("Press any key...");
    Console.ReadKey();
  }
}

결과를 보면 mariaDB에도 데이터가 잘 입력이 되었습니다. 반대로 출력을 해보겠습니다.

class Program
{
  static void Main(string[] args)
  {
    // entity framework의 context를 가져온다.
    using (var context = new efexampleContext())
    {
      // Test1 테이블에서 idx가 1인 레코드와 Test2에 연결되어 있는 데이터를 가져와라
      var list = context.test1.Include(t => t.test2).Where(x => x.idx == 1).ToList();
      foreach (var entity in list)
      {
        // 취득해온 데이터의 data값을 출력하라
        Console.WriteLine(entity.data);
        foreach (var reference in entity.test2)
        {
          // 연결된 Test2테이블의 값의 data값을 출력하라.
          Console.WriteLine(reference.data);
        }
      }
    }
    Console.WriteLine("Press any key...");
    Console.ReadKey();
  }
}

Mysql로부터 문제없이 데이터 취득이 되었습니다. C#에서도 Entity Framework를 이용해서 Mysql를 사용할 수 있습니다.


여기까지 C#의 Entity framework에서 mysql(mariaDB)를 사용하는 방법이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.