2017-05-01 10 views
1

私はプロパティを削除したい場合は、私は2つのオプションがあります。どちらの場合もdbSetとローカルプロパティのエンティティの追加と削除の違いは何ですか?

  • myDbContext.MyType.Add(myEntity);
  • myDbContext.MyType.Local.Add(myEntity);

を、少なくとも私の場合には、違いが表示されていないが、私違う行為をしているかどうかは分かりません。

本当に同じですか?

ありがとうございました。

答えて

1

にToBindingListを呼び出した結果にバインド:

myDbContext.MyType.Add(myEntity)。

///  Begins tracking the given entity, and any other reachable entities that are 
    ///  not already being tracked, in the <see cref="EntityState.Added" /> state such that 
    ///  they will be inserted into the database when <see cref="SaveChanges()" /> is called. 

myDbContext.MyType.Local.Add(myEntity)。

///  <para> 
    ///   Adds a new entity to the <see cref="DbContext" />. If the entity is not being tracked or is currently 
    ///   marked as deleted, then it becomes tracked as <see cref="EntityState.Added" />. 
    ///  </para> 
    ///  <para> 
    ///   Note that only the given entity is tracked. Any related entities discoverable from 
    ///   the given entity are not automatically tracked. 
    ///  </para> 

上記2番目の段落は、両方の方法の間の差を指定します。

本質的に、相違点は、DbSet.Addは再帰的です。新しい依存エンティティも追加されます。 Local.Addは現在のエンティティのみを追加します。

例コード:

エンティティタイプ:

public class Blog 
{ 
    public int Id { get; set; } 
    public IList<Post> Posts { get; set; } 
} 

public class Post 
{ 
    public int Id { get; set; } 
} 

ケース1:

db.Blogs.Add(
    new Blog 
    { 
     Posts = new List<Post> 
       { 
        new Post(), 
        new Post(), 
       } 
    } 
); 

db.SaveChanges(); 

var query = db.Set<Post>().Count(); //Output will be 2 

ケース2

db.Blogs.Local.Add(
    new Blog 
    { 
     Posts = new List<Post> 
       { 
        new Post(), 
        new Post(), 
       } 
    } 
); 

db.SaveChanges(); 

var query = db.Set<Post>().Count(); //Output will be 0 
0

myDbContext.MyType.Add(myEntity);

それは次の操作を行います。

SaveChangesが呼び出されたとき、それはデータベースに挿入されるようAdded状態でセットの基礎となるコンテキストに指定されたエンティティを追加します。

myDbContext.MyType.Local.Add(myEntity);

これは、次の操作を行います:

は、すべての追加、変更なし、そしてこのセットで変更されたエンティティのローカルビューを表しSystem.Collections.ObjectModel.ObservableCollection 1 'を取得します。エンティティがコンテキストに追加または削除されると、このローカルビューは同期したままになります。

同様に、ローカルビューに追加または削除されたエンティティは、自動的にコンテキストに追加またはコンテキストから削除されます。

備考:

このプロパティは、ロード拡張メソッドを使用して、このプロパティを介して、ローカルデータに結合することによって、例えば、データをセットに移入することにより、データバインディングのために使用することができます。 WPFの場合は、このプロパティに直接バインドします。 Windowsのフォームは、メソッドのドキュメントに基づいて、このプロパティ

関連する問題