기본 SaveChanges
DbContext.SaveChanges()는 EF를 사용하여 데이터베이스에 변경 내용을 저장하는 2가지 기술 중 하나입니다. 이 메서드를 사용하면 추적되는 변경(추가, 업데이트, 삭제)을 하나 이상 수행한 다음, SaveChanges
메서드를 호출하여 해당 변경을 적용할 수 있습니다. 또는 변경 내용 추적기를 사용하지 않고 ExecuteUpdate와 ExecuteDelete를 사용할 수도 있습니다. 이 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
는 트랜잭션입니다. 즉, 모든 작업 결과는 성공 또는 실패이며 작업이 부분적으로 적용된 상태로 있을 수 없습니다.
.NET