MongoDB에 데이터 쓰기
개요
Entity Framework Core를 사용하면 데이터베이스 명령을 명시적으로 실행 하지 않고도 애플리케이션 에서 데이터로 작업할 수 있습니다. SaveChanges()
또는 SaveChangesAsync()
메서드를 사용하여 애플리케이션 내에서 데이터를 삽입, 업데이트 또는 삭제 하고 이러한 변경 사항을 MongoDB 에 유지할 수 있습니다.
SaveChanges()
또는 SaveChangesAsync()
메서드를 호출하면 EF Core Provider는 데이터에 대한 변경 사항을 자동으로 감지하고 MongoDB 쿼리 API 를 사용하여 데이터베이스 를 업데이트 하는 데 필요한 명령을 실행합니다.
이 가이드 에서는 EF Core Provider를 사용하도록 구성된 애플리케이션 에서 일반적인 쓰기 (write) 작업을 수행하는 방법의 예를 확인할 수 있습니다.
팁
EF 코어 제공자를 사용하도록 애플리케이션 을 구성하는 방법을 학습 보려면 EF 코어 제공자 구성을 참조하세요.
트랜잭션 쓰기 작업
SaveChanges()
및 SaveChangesAsync()
메서드는 기본값 트랜잭션입니다. 즉, 작업 중에 오류가 발생하면 제공자 는 데이터베이스 에 대한 모든 변경 사항을 롤백합니다. 이 때문에 애플리케이션 은 복제본 세트 와 같이 트랜잭션이 가능한 MongoDB 서버 배포서버 서버에 연결되어야 합니다.
애플리케이션 을 설정 하는 동안 DbContext
서브클래스에서 AutoTransactionBehavior
속성 을 AutoTransaction.Never
로 설정하여 SaveChanges()
및 SaveChangesAsync()
메서드에서 자동 트랜잭션을 비활성화할 수 있습니다. 그러나 이 기능 비활성화하지 않는 것이 좋습니다. 이렇게 하면 저장 작업 중에 동시성 변경 또는 작업 실패가 발생하여 데이터베이스 가 일관되지 않은 상태 가 됩니다.
다음 예시 는 SaveChanges()
및 SaveChangesAsync()
메서드에서 자동 트랜잭션을 비활성화하는 방법을 보여줍니다.
dbContext.Database.AutoTransactionBehavior = AutoTransactionBehavior.Never;
경고
자동 트랜잭션을 비활성화하면 데이터 불일치가 발생할 수 있습니다. 이 기능 은 비활성화하지 않는 것이 좋습니다.
Insert
Add()
메서드를 사용하여 컬렉션에 단일 엔터티를 삽입하거나 AddRange()
메서드를 사용하여 여러 엔터티를 한 번에 삽입할 수 있습니다.
하나의 엔터티 삽입
Add()
메서드는 수정하려는 DbSet
인스턴스에 지정한 동일한 유형의 단일 엔터티를 허용합니다.
다음 코드는 Add()
메서드를 사용하여 Planets
DbSet
에 새 Planet
객체를 추가합니다. 그런 다음 SaveChanges()
메서드를 호출하여 해당 엔터티를 MongoDB collection에 삽입합니다.
db.Planets.Add(new Planet() { name = "Pluto", hasRings = false, orderFromSun = 9 }); db.SaveChanges();
여러 엔티티 삽입
AddRange()
메서드는 DbSet
에 추가하려는 엔터티의 배열을 허용합니다.
다음 코드는 AddRange()
메서드를 사용하여 Planet
객체 배열을 Planets
DbSet
에 추가합니다. 그런 다음 SaveChanges()
메서드를 호출하여 해당 엔터티를 MongoDB collection에 삽입합니다.
var planets = new[] { new Planet() { _id = ObjectId.GenerateNewId(), name = "Pluto", hasRings = false, orderFromSun = 9 }, new Planet() { _id = ObjectId.GenerateNewId(), name = "Scadrial", hasRings = false, orderFromSun = 10 } }; db.Planets.AddRange(planets); db.SaveChanges();
Update
엔터티를 업데이트 업데이트 엔터티를 조회 합니다. 그런 다음 해당 엔터티를 변경합니다. 제공자 는 속성을 설정하거나 목록 값이 있는 필드에 항목을 추가 및 제거하는 등 엔터티에 대한 모든 변경 사항을 추적합니다. MongoDB 에 업데이트 를 저장하려면 SaveChanges()
메서드를 호출합니다. EF Core Provider는 업데이트된 엔터티를 변경 전 엔터티의 스냅샷 과 비교하고, MongoDB 쿼리 API 를 사용하여 컬렉션 을 자동으로 업데이트합니다.
다음 코드는 name
값이 "Mercury"
인 엔터티를 조회한 다음 name
필드를 업데이트합니다. 그런 다음 이 코드는 SaveChanges()
메서드를 호출하여 해당 변경 사항을 collection에 유지합니다.
var planet = db.Planets.FirstOrDefault(p => p.name == "Mercury"); planet.name = "Mercury the first planet"; db.SaveChanges();
삭제
Remove()
메서드를 사용하여 collection에서 단일 엔터티를 삭제하거나 RemoveRange()
메서드를 사용하여 여러 엔터티를 한 번에 삭제할 수 있습니다.
1개의 엔티티 삭제
Remove()
메서드는 수정하려는 DbSet
인스턴스에 지정한 동일한 유형의 단일 엔터티를 허용합니다.
다음 코드는 name
값이 "Pluto"
인 Planet
엔티티를 제거합니다. 그런 다음 SaveChanges()
메서드를 호출하여 MongoDB collection에서 해당 엔터티를 삭제합니다.
var planet = db.Planets.FirstOrDefault(p => p.name == "Pluto"); db.Planets.Remove(planet); db.SaveChanges();
여러 엔티티 삭제
RemoveRange()
메서드는 DbSet
에서 제거할 엔터티의 배열을 허용합니다.
다음 코드는 두 개의 Planet
엔티티를 찾아 배열에 추가합니다. 그런 다음 RemoveRange()
메서드를 사용하여 DbSet
에서 두 엔터티를 모두 제거합니다. 마지막으로 SaveChanges()
메서드를 사용하여 MongoDB 컬렉션에서 해당 엔터티를 제거합니다.
var pluto = db.Planets.FirstOrDefault(p => p.name == "Pluto"); var scadrial = db.Planets.FirstOrDefault(p => p.name == "Scadrial"); var planets = new[] { pluto, scadrial }; db.Planets.RemoveRange(planets); db.SaveChanges();
추가 정보
이 가이드에 설명된 메서드에 대해 자세히 알아보려면 다음 .NET API 문서 링크를 참조하세요.