기본 SaveChanges

DbContext.SaveChanges()는 EF를 사용하여 데이터베이스에 변경 내용을 저장하는 2가지 기술 중 하나입니다. 이 메서드를 사용하면 추적되는 변경(추가, 업데이트, 삭제)을 하나 이상 수행한 다음, SaveChanges 메서드를 호출하여 해당 변경을 적용할 수 있습니다. 또는 변경 내용 추적기를 사용하지 않고 ExecuteUpdateExecuteDelete를 사용할 수도 있습니다. 이 2가지 기술을 비교하며 소개하는 내용을 보려면 데이터 저장에서 개요 페이지를 참조하세요.

GitHub에서 이 문서의 샘플을 볼 수 있습니다.

데이터 추가

DbSet<TEntity>.Add 메서드를 사용하여 엔터티 클래스의 새 인스턴스를 추가합니다. DbContext.SaveChanges()를 호출하면 데이터가 데이터베이스에 삽입됩니다.

using (var context = new BloggingContext())
{
    var blog = new Blog { Url = "http://example.com" };
    context.Blogs.Add(blog);
    context.SaveChanges();
}

Add, Attach, Update 메서드는 모두 관련 데이터 섹션에 설명된 대로 해당 메서드에 전달된 엔터티의 전체 그래프에서 작동합니다. 또는 EntityEntry.State 속성을 사용하여 단일 엔터티의 상태를 설정할 수 있습니다. 예들 들어 context.Entry(blog).State = EntityState.Modified입니다.

데이터 업데이트

EF는 컨텍스트에서 추적하는 기존 엔터티의 변경 내용을 자동으로 검색합니다. 여기에는 데이터베이스에서 로드/쿼리하는 엔터티 및 이전에 데이터베이스에 추가되고 저장된 엔터티가 포함됩니다.

속성에 할당된 값을 수정한 후 SaveChanges를 호출하면 됩니다.

using (var context = new BloggingContext())
{
    var blog = context.Blogs.Single(b => b.Url == "http://example.com");
    blog.Url = "http://example.com/blog";
    context.SaveChanges();
}

데이터 삭제

DbSet<TEntity>.Remove 메서드를 사용하여 엔터티 클래스의 인스턴스를 삭제합니다.

using (var context = new BloggingContext())
{
    var blog = context.Blogs.Single(b => b.Url == "http://example.com/blog");
    context.Blogs.Remove(blog);
    context.SaveChanges();
}

엔터티가 데이터베이스에 이미 있는 경우 SaveChanges 중에 삭제됩니다. 엔터티가 아직 데이터베이스에 저장되지 않은 경우(즉, 추가됨으로 추적되는 경우) 컨텍스트에서 제거되고 SaveChanges가 호출될 때 더 이상 삽입되지 않습니다.

단일 SaveChanges의 여러 작업

여러 추가/업데이트/제거 작업을 SaveChanges에 대한 단일 호출에 결합할 수 있습니다.

using (var context = new BloggingContext())
{
    // seeding database
    context.Blogs.Add(new Blog { Url = "http://example.com/blog" });
    context.Blogs.Add(new Blog { Url = "http://example.com/another_blog" });
    context.SaveChanges();
}

using (var context = new BloggingContext())
{
    // add
    context.Blogs.Add(new Blog { Url = "http://example.com/blog_one" });
    context.Blogs.Add(new Blog { Url = "http://example.com/blog_two" });

    // update
    var firstBlog = context.Blogs.First();
    firstBlog.Url = "";

    // remove
    var lastBlog = context.Blogs.OrderBy(e => e.BlogId).Last();
    context.Blogs.Remove(lastBlog);

    context.SaveChanges();
}

참고 항목

대부분의 데이터베이스 공급자의 경우 SaveChanges는 트랜잭션입니다. 즉, 모든 작업 결과는 성공 또는 실패이며 작업이 부분적으로 적용된 상태로 있을 수 없습니다.