サーチ…


備考

Entity Frameworkのエンティティは、 System.Data.Entity.EntityState列挙によって列挙されるさまざまな状態を持つことができます。これらの状態は次のとおりです。

Added    
Deleted    
Detached    
Modified    
Unchanged

Entity FrameworkはPOCOと連携します。つまり、エンティティは、独自の状態を管理するプロパティとメソッドを持たない単純なクラスです。エンティティの状態は、 ObjectStateManagerコンテキスト自体によって管理されます。

このトピックでは、エンティティの状態を設定するさまざまな方法について説明します。

状態の設定単一エンティティの追加

EntityState.Addedは、2つの全く同じ方法で設定できます。

  1. コンテキスト内のエントリの状態を設定することによって:

     context.Entry(entity).State = EntityState.Added;
    
  2. それをコンテキストのDbSetに追加することによって:

     context.Entities.Add(entity);
    

SaveChanges呼び出すと、エンティティがデータベースに挿入されます。それは、 このプロパティがすでに値を持っていたとしても、それがID列(自動セット、自動インクリメントプライマリキー)を持っている場合SaveChanges後、エンティティのプライマリキープロパティは新しく生成された値を含みます

設定状態オブジェクトグラフの追加

オブジェクトグラフ (関連するエンティティの集合)の状態を[ Added設定することは、単一のエンティティをAddedとして設定することとは異なります( この例を参照)。

この例では、惑星とその月を保存しています:

クラスモデル

public class Planet
{
    public Planet()
    {
        Moons = new HashSet<Moon>();
    }
    public int ID { get; set; }
    public string Name { get; set; }
    public ICollection<Moon> Moons { get; set; }
}

public class Moon
{
    public int ID { get; set; }
    public int PlanetID { get; set; }
    public string Name { get; set; }
}

コンテキスト

public class PlanetDb : DbContext
{
    public property DbSet<Planet> Planets { get; set; }
}

この文脈のインスタンスを使用して、惑星とその月を追加します。

var mars = new Planet { Name = "Mars" };
mars.Moons.Add(new Moon { Name = "Phobos" });
mars.Moons.Add(new Moon { Name = "Deimos" });

context.Planets.Add(mars);

Console.WriteLine(context.Entry(mars).State);
Console.WriteLine(context.Entry(mars.Moons.First()).State);

出力:

Added
Added

ここで見られるのは、 Planetを追加することで、月の状態がAdded設定されるということです。

エンティティの状態をAddedに設定すると、ナビゲーションプロパティ( Planet.Moonsなどの他のエンティティに「ナビゲート」するプロパティ)内のすべてのエンティティも、既にコンテキストにアタッチされていない限り、 Addedとしてマークされます



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow