개발
[WPF] Entity Framework Core로 SQLite 다루기
텐지니어
2020. 10. 26. 21:01
이번 장은 C#에서 SQLite를 쉽게 사용하는 법을 작성한다. 퇴근 10분 전에 후다닥 작성하는 글이라 정리는 못하니 코드 위주로 참고하자. MSDN에 보면 많은 내용들이 있는데 가장 간단하게 표현해본다. 수업시간에 잠깐 설명해줄까?
(코드 샘플은 글 하단에.)
docs.microsoft.com/ko-kr/ef/core/
Entity Framework Core 개요 - EF Core
Entity Framework Core의 일반 소개 개요
docs.microsoft.com
자, 우선 Model을 만들자.
만일 DB에 저장하지 않는 프로퍼티(properties)가 있다면, 해당 프로퍼티에는 [NotMapped]을 어트리뷰트(Attribute)로 추가한다.
public class Blog
{
public int BlogId { get; set; }
public string Title { get; set; }
public string SubTitle { get; set; }
public DateTime DateTimeAdd { get; set; }
}
그리고 DbContext를 만들자. (WPF에서 DataContext를 사용해본 친구가 있을 거다. 그것과 유사하다고 이해하면 된다)
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite("Data Source=TestDatabase.db");
}
첨부한 파일은 콘솔 프로젝트로 만들었는데 WPF도 별반 차이 없다. (컴파일 에러가 하나 나긴 할 건데 데이터베이스를 한 친구라면 금방 알 듯)
static void Main(string[] args)
{
string dbName = "TestDatabase.db";
using (var dbContext = new BloggingContext())
{
if (File.Exists(dbName)) //파일이 존재하면 읽어
{
foreach (var blog in dbContext.Blogs)
{
Console.WriteLine($"BlogID={blog.BlogId}\tTitle={blog.Title}\t{blog.SubTitle}\tDateTimeAdd={blog.DateTimeAdd}");
}
}
else
{
//Ensure database is created
dbContext.Database.EnsureCreated();
if (!dbContext.Blogs.Any()) //어떤 데이터도 없으면 데이터 넣어서 확인하자
{
dbContext.Blogs.AddRange(new Blog[]
{
new Blog{ BlogId=1, Title="Blog 1", SubTitle="Blog 1 subtitle", DateTimeAdd = DateTime.Now },
new Blog{ BlogId=2, Title="Blog 2", SubTitle="Blog 2 subtitle" },
new Blog{ BlogId=3, Title="Blog 3", SubTitle="Blog 3 subtitle" }
});
dbContext.SaveChanges();
}
foreach (var blog in dbContext.Blogs)
{
Console.WriteLine($"BlogID={blog.BlogId}\tTitle={blog.Title}\t{blog.SubTitle}\tDateTimeAdd={blog.DateTimeAdd}");
}
}
}
Console.ReadLine();
}
실행~
참 쉽죠? (미안)