소개
C# 프로그램에서 LocalDB 를 사용하는 좋은 방법중 한가지는 SQLite 를 사용하는것입니다.
또한 C# 큰 장점 Linq 를 충분히 활용할 수 있는 EntityFramework 를 사용 할 수 있게 끔 하는것이 이번 포스팅의 목표입니다.
Visual Studio 프로젝트에서 MSSQL 을 연결하는것은 너무 쉽습니다.
ADO.NET 엔티티데이터모델을 선택해서 데이터 베이스를 선택만 해주면 아주쉽게 모델을 구성할 수 있습니다.
SQLite도 예전 Visual Studio 2015, 2017 시절에는 비슷하게 흉내를 내는 시도를 많이 했습니다.
SQLite 사이트에서 제공하는 프로그램을 Visual Studio 에 설치하면 MSSql 접근하는 방식과 거의 비슷하게 동작이 가능했습니다.
그런데 Visual Studio 가 버전업그레이드가 되면서 맞춰 가는 속도가 점점 더뎌지더군요.
그래서 다른방식으로 SQlite DB 를 사용하는게 낫다 싶어 조사하고 포스팅합니다.
다음처럼 따라 하시면 간단히 C# 프로그램에서 SQLite DB를 연결하고 사용할 수 있습니다.
DB 생성
먼저 DB 를 만들어 줄것입니다.
DB 만들어 주는 툴을 소개를 드립니다.
SQLiteBrowser 라는 툴입니다.
다음위치에서 프로그램을 다운로드 받습니다.
Downloads – DB Browser for SQLite (sqlitebrowser.org)
실행을 시키고 간단히 이번 포스팅에서 사용할 테스트 DB를 만들어 주겠습니다.
![[C#] Visual Studio 에서 SQLite 사용하기 1 [C#] Visual Studio 에서 SQLite 사용하기](https://i0.wp.com/harostudio.co.kr/wp-content/uploads/2023/08/1.png?resize=552%2C388&ssl=1)
위와 같이 Table이라는 Table에 Index , Name 두 필드를 생성하고 파일이름을 TestDB.db 로 명명 했습니다.
프로젝트 생성
비쥬얼 스튜디오를 실행하고 테스트로 C# 콘솔앱을 하나 만들겠습니다. 저는 .Net 7.0 으로 만들겠습니다.
프로젝트 명을 SQLiteConsole 로 정해주고 프로젝트 생성을 한후에 위에서 만들어준 DB를 끌어다 솔루션 탐색기에 붙여 넣습니다.
그리고 속성을 다음처럼 변경합니다.
![[C#] Visual Studio 에서 SQLite 사용하기 2 [C#] Visual Studio 에서 SQLite 사용하기](https://i0.wp.com/harostudio.co.kr/wp-content/uploads/2023/08/AC_20230825-095034.png?resize=640%2C258&ssl=1)
Nuget packages 다운로드
Nuget 패키지관리 메뉴를 열고 다음패키지들을 설치 합니다.
- Microsoft.EntityFrameworkCore.Tools
- Microsoft.EntityFrameworkCore.Sqlite
또는 패키지 관리자 콘솔로 설치 할 수 있습니다.
- PM> Install-Package Microsoft.EntityFrameworkCore.Tools
- PM> install-Package Microsoft.EntityFrameworkCore.Sqlite
.Net 7.0 기준으로 만들어졌으므로 패키지들도 7.~ 대의 패키지를 설치 하였습니다.
![[C#] Visual Studio 에서 SQLite 사용하기 3 [C#] Visual Studio 에서 SQLite 사용하기](https://i0.wp.com/harostudio.co.kr/wp-content/uploads/2023/08/AC_20230825-095550.png?resize=353%2C116&ssl=1)
모델생성
패키지 관리자 콘솔을 열어줍니다.
다음과 같이 타이핑 합니다.
Scaffold-DbContext “Data Source=TestDB.db” Microsoft.EntityFrameworkCore.Sqlite -OutputDir Models
![[C#] Visual Studio 에서 SQLite 사용하기 4 [C#] Visual Studio 에서 SQLite 사용하기](https://i0.wp.com/harostudio.co.kr/wp-content/uploads/2023/08/AC_20230825-100642.png?resize=687%2C513&ssl=1)
그러면 위와 같이 Models라는 폴더에 모델이 생성된것이 보입니다.
이때 TestDB.db 와 Models 는 제가 작성한 샘플이며 실제는 개발 환경에 맞게 변경해주시면 됩니다.
생성된 모델을 한번 볼께요..
TestDbContext.cs
using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;
namespace SQLiteConsole.Models;
public partial class TestDbContext : DbContext
{
public TestDbContext()
{
}
public TestDbContext(DbContextOptions<TestDbContext> options)
: base(options)
{
}
public virtual DbSet<Table> Tables { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
=> optionsBuilder.UseSqlite("Data Source=TestDB.db");
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Table>(entity =>
{
entity.HasKey(e => e.Index);
entity.ToTable("TABLE");
entity.Property(e => e.Index).ValueGeneratedNever();
});
OnModelCreatingPartial(modelBuilder);
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
}
Table.cs
using System;
using System.Collections.Generic;
namespace SQLiteConsole.Models;
public partial class Table
{
public long Index { get; set; }
public string? Name { get; set; }
}
CRUD
Program.cs 에서 다음처럼 코딩후 실행 시켜 보겠습니다.
데이터를 하나 써주고 모든 Row를 화면에 뿌려주는 간단한 예제 입니다.
using SQLiteConsole.Models;
try
{
Table item = new Table()
{
Index = 2,
Name = "test",
};
// Insert
using (var db = new TestDbContext())
{
db.Tables.Add(item);
db.SaveChanges();
}
// Read & Print
using (var db = new TestDbContext())
{
foreach(var row in db.Tables)
{
Console.WriteLine($"Index : {row.Index} - Name : {row.Name}");
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
if (e.InnerException != null) Console.WriteLine(e.InnerException.Message);
}
실행 시키면 다음과 같이 실행 됩니다.
![[C#] Visual Studio 에서 SQLite 사용하기 5 [C#] Visual Studio 에서 SQLite 사용하기](https://i0.wp.com/harostudio.co.kr/wp-content/uploads/2023/08/AC_20230825-111657.png?resize=541%2C307&ssl=1)
원래 있던 1번 데이터뒤에 2번 Test 문구가 추가된것이 보이지요?
결론
위와 같이 표시되며 Visual Studio에서 SQLite DB를 아주 쉽게 컨트롤 하는 방법을 배웠습니다.
DB 연결은 마무리 되었으니 EntityFrameWork 을 사용하여 WPF 같은 UI 프로그램도 구성할 수 있습니다.