Docs Menu
Docs Home
/ / /
EF 핵심 제공자
/

MongoDB에 데이터 쓰기

이 페이지의 내용

  • 개요
  • 트랜잭션 쓰기 작업
  • Insert
  • 하나의 엔터티 삽입
  • 여러 엔티티 삽입
  • Update
  • 삭제
  • 1개의 엔티티 삭제
  • 여러 엔티티 삭제
  • 추가 정보

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;

경고

자동 트랜잭션을 비활성화하면 데이터 불일치가 발생할 수 있습니다. 이 기능 은 비활성화하지 않는 것이 좋습니다.

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();

엔터티를 업데이트 업데이트 엔터티를 조회 합니다. 그런 다음 해당 엔터티를 변경합니다. 제공자 는 속성을 설정하거나 목록 값이 있는 필드에 항목을 추가 및 제거하는 등 엔터티에 대한 모든 변경 사항을 추적합니다. 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() 메서드를 사용하여 여러 엔터티를 한 번에 삭제할 수 있습니다.

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 문서 링크를 참조하세요.

  • SaveChanges()

  • Add()

  • AddRange()

  • Remove()

  • RemoveRange()

돌아가기

쿼리 데이터