Docs Menu
Docs Home
/ / /
FS コア プロバイダー
/

MongoDB へのデータの書込み (write)

項目一覧

  • Overview
  • トランザクション書込み (write) 操作
  • Insert
  • 1 つのエンティティを挿入
  • 複数のエンティティの挿入
  • Update
  • 削除
  • 1 つのエンティティを削除
  • 複数のエンティティの削除
  • 詳細情報

Entity Framework コアを使用すると、データベースコマンドを明示的に実行せずにアプリケーション内のデータを操作できます。 SaveChanges()またはSaveChangesAsync()メソッドを使用して、アプリケーション内でデータを挿入、更新、または削除し、それらの変更を MongoDB に保持できます。

SaveChanges()メソッドまたはSaveChangesAsync()メソッドを呼び出すと、FS コア プロバイダーはデータに加えられた変更を自動的に検出し、MongoDB Query API を使用してデータベースをアップデートするために必要なコマンドを実行します。

このガイドでは、FS コア プロバイダーを使用するように構成されたアプリケーションで一般的な書込み操作を実行する方法の例を確認できます。

Tip

FS コア プロバイダーを使用するようにアプリケーションを構成する方法については、「 FS コアの構成 」を参照してください。

SaveChanges()メソッドとSaveChangesAsync()メソッドはデフォルトでトランザクションです。 つまり、操作中にエラーが発生した場合、プロバイダーはデータベースに加えられたすべての変更をロールバックします。 このため、アプリケーションは、レプリカセットなど、トランザクションが可能な MongoDB サーバーの配置に接続する必要があります。

アプリケーションの設定時にDbContextサブクラスでAutoTransactionBehaviorプロパティをAutoTransaction.Neverに設定することで、 SaveChanges()メソッドとSaveChangesAsync()メソッドで自動トランザクションを無効にできます。 ただし、この機能を無効にすることは推奨されません。 指定すると、保存操作中に同時実行の変更や操作が失敗し、データベースが非整合性のある状態のままになります。

次の例は、SaveChanges() メソッドとSaveChangesAsync() メソッドで自動トランザクションを無効にする方法を示しています。

dbContext.Database.AutoTransactionBehavior = AutoTransactionBehavior.Never;

警告

自動トランザクションを無効にすると、データの不整合が発生する可能性があります。 この機能を無効にしないことをお勧めします。

Add()メソッドを使用して 1 つのエンティティをコレクションに挿入することも、 AddRange()メソッドを使用して複数のエンティティを一度に挿入することもできます。

Add()メソッドは、変更対象のDbSetインスタンスで指定したタイプと同じタイプの 1 つのエンティティを受け入れます。

次のコードでは、Add() Planetメソッドを使用して、 と呼ばれる新しい オブジェクトをDbSet Planetsに追加します。次に、 SaveChanges()メソッドを呼び出して、そのエンティティを MongoDB コレクションに挿入します。

db.Planets.Add(new Planet()
{
name = "Pluto",
hasRings = false,
orderFromSun = 9
});
db.SaveChanges();

AddRange()メソッドは、 DbSetに追加するエンティティの配列を受け入れます。

AddRange()次のコードでは、Planet メソッドを使用して、DbSet と呼ばれる オブジェクトの配列をPlanets に追加します。次に、 SaveChanges()メソッドを呼び出して、それらのエンティティを MongoDB コレクションに挿入します。

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()メソッドを呼び出します。 F Core プロバイダーは、アップデートされたエンティティを変更前のエンティティのスナップショットと比較し、MongoDB Query API を使用して コレクションを自動的にアップデートします。

次のコードは、 nameの値が"Mercury"であるエンティティを検索し、 nameフィールドをアップデートします。 次に、コードはSaveChanges()メソッドを呼び出して、その変更をコレクションに永続化します。

var planet = db.Planets.FirstOrDefault(p => p.name == "Mercury");
planet.name = "Mercury the first planet";
db.SaveChanges();

コレクションから 1 つのエンティティを削除するにはRemove()メソッドを、複数のエンティティを一度に削除するにはRemoveRange()メソッドを使用します。

Remove()メソッドは、変更対象のDbSetインスタンスで指定したタイプと同じタイプの 1 つのエンティティを受け入れます。

次のコードは、 name値が"Pluto"であるPlanetエンティティを削除します。 次に、 SaveChanges()メソッドを呼び出して、そのエンティティは MongoDB コレクションから削除されます。

var planet = db.Planets.FirstOrDefault(p => p.name == "Pluto");
db.Planets.Remove(planet);
db.SaveChanges();

RemoveRange()メソッドは、 DbSetから削除するエンティティの配列を受け入れます。

次のコードでは、2 つの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 ドキュメントへのリンクを参照してください。

  • Save Changes()

  • Add()

  • AddRange()

  • Remove()

  • RemoveRange()

戻る

クエリ データ