2017-11-17 2 views
1

私はADからユーザー資格情報を取得して、Profilesテーブルに保存するときにコントローラを持っています。私はまた、いくつかのユーザー設定を設定したいと思いますが、これを行うには、ProfileからIdが必要です。Preferenceテーブルに保存しました。db.SaveChanges()を2回呼び出すことはいつ可能ですか?

var Profile = new Profile 
{ 
    //Id is auto increment 
    EmpId = viewmodel.EmployeeId; 
    //.... 
}; 
db.Profiles.Add(Profile); 
db.SaveChanges(); 

設定保存:この場合

var user = User.Identity.Name; 
var getUser = (from gu in db.Profiles where user == gu.EmployeeId select gu.Id).Single(); 
var Preference = new Preference 
{ 
    UserId = getUser, 
    //... 
}; 
db.Preferences.Add(Preference); 
db.SaveChanges(); 

を、これは許容できるでしょうか?

+0

はい、どうしてですか。しかし、ナビゲーションプロパティ( 'new Preference {User = profileWhichIsNotYetSaved}')にプロファイルを割り当てて、それを一度だけ呼び出すこともできます。 – Evk

+0

ここでucが定義されています – Harry

+0

バッチ操作やトランザクションを実行していない任意の時点で受け入れ可能です –

答えて

1

変数getUser(この変数の名前を変更してください)は、新しく保存されたプロファイルIDとして終了します。ucを定義する場所は表示されません。

とにかくエンティティフレームワークの魔法を教えてください。

var profile = new Profile 
{ 
    //Id is auto increment 
    EmpId = viewmodel.EmployeeId; 
    //.... 
}; 
var preference = new Preference 
{ 
    //... 
}; 

profile.Preferences.Add(preference;) 
db.Profiles.Add(profile); 
db.SaveChanges(); 

だから、あなたが見ることができるように、あなたは不必要以上1つのSaveChangesメソッドを使用していました。複数のSaveChangesが必要な場合があります。あなたはSaveChangesと言って、IDをapiに投稿し、いくつかの値を取り出して変更を再度保存するようなことができます。私はそれを実際に行う必要はありませんでしたが、私は1回以上の変更を保存する必要がある時がありました。たとえば、関連レコードのx量を含むデータベースレコードのx量をループ内の新しいレコードにコピーする必要がありました。

+0

'uc'はタイプミスでした。 – Skullomania

+0

skullomania私はここで答えたことをやってみましたか? – Harry

+0

私はpreference.userIdでヌルリファレンスを取得しました。最初はうまくいって以来、よく分かっているわけではありません。 – Skullomania

関連する問題