2017-10-18 15 views
1

私はエンティティフレームワークを使用しています。既存の子を新しい親に追加する方法

グループ:ID、名前

ユーザー:ID、名前、グループID

私のモデルは、このようなものです。

状況は次のとおりです。 私はあるグループのメンバーではないユーザー(User1)がいます。

私は新しいグループを作成し、この新しいグループにこのユーザーを追加します。

私はこのコードを持っている:

Dim grp1 as new Group 
grp1.name="Students" 
context.Groups.Add(grp1) 
context.savechanges() 
usr1.GroupID=grp1.ID 
context.savechanges() 

このコードは動作しますが、私は二回のSaveChanges呼ばれています。 既存のusr1をgrp1の子コレクションに添付して後でSavechangesを1回だけ呼び出す方法はありますか?

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

+0

は)(あなたが最初context.SaveChangesを削除しようとしたことがありますか?私は2つのAdd()のはまだ正しく動作すると思います。 – Kokombads

+0

'Group'の' Users'コレクションに 'User'を追加したい場合は、' grp1.Users.Add(usr1) 'を実行します。 – jmcilhinney

+0

@jmcilhinneyではなくusr1が存在し、新しいオブジェクトではありません。 – Adriano

答えて

0

usr1がトラッキングされたエンティティの場合、そのIDを使用しようとする代わりに、ユーザのGroupナビゲーションプロパティにグループを追加できます。ナビゲーションプロパティに新しいオブジェクトを割り当てることによって

Dim grp1 as new Group 
grp1.name="Students" 
usr1.Group=grp1 
context.savechanges() 

https://msdn.microsoft.com/en-us/library/jj713564(v=vs.113).aspx

。次のコード は、コースと部門の間の関係を作成します。文脈に オブジェクトが添付されている場合は、コースも 部門に追加されます。コースコレクション、およびコースオブジェクトの対応する外部キー プロパティは 部門のキープロパティ値に設定されます。コース。部署=部署。

https://msdn.microsoft.com/en-us/library/jj592676(v=vs.113).aspx(ブログの例を参照)

using (var context = new BloggingContext()) 
{ 
    // Add a new User by setting a reference from a tracked Blog 
    var blog = context.Blogs.Find(1); 
    blog.Owner = new User { UserName = "johndoe1987" }; 

    context.SaveChanges(); 
} 
関連する問題