私はEFに比較的慣れていません。SaveChanges を呼び出した後、関連するテーブル データが利用できないようです。
User、Feature、および FeatureUser というテーブルを持つデータベースがあるとします。FeatureUser は、User レコードと Feature レコードを結び付けます。Feature オブジェクトを受け入れるメソッドがあり、FeatureUser テーブルに基づいて User.name 値をリストに入力します。これはうまくいきます:
using (var db = new projectModel())
{
feature f = db.features.First();
populateList(f);
}
private void populateList(feature f)
{
foreach(featureuser fu in f.featureusers)
addToList(fu.user.name);
}
上記のコードで重要な点は、FeatureUser テーブルの User テーブルへの組み込みリンクを介して User.name 値に戻ることです。うまくいかないのは、新しい FeatureUser レコードを作成して保存し、同じプロセスに従おうとすることです。
using (var db = new projectModel())
{
feature f = db.features.First();
foreach(int newuserid in somearray)
{
featureuser nfu = new featureuser();
nfu.featureid = f.id;
nfu.userid = newuserid;
f.featureusers.add(nfu);
}
db.SaveChanges();
populateList(f); // null reference error on fu.user.name
}
リレーションシップの作成に必要な外部キーを確立して保存したら、これらの便利な組み込みリレーションシップ コレクションをすべて解決するように EF に指示する方法はありますか?