私のデータベースには、Ref_Type ナビゲーション プロパティ (および TypeID を参照する FK) を持つエンティティ テーブルが設定されています。Type テーブルには、Ref_Department と同じ FK セットアップがあります。最後に、Department テーブルには Ref_Locale と同じ FK セットアップがあります。
シングルトンのプロパティであるリストにエンティティを保存します。次のように作成されます。
private Singleton()
{
using (Database db = new Database())
{
List<Entities> EntityList = db.Entities.ToList<Entities>();
}
}
これで問題ありません。ナビゲーション プロパティはすべて読み込まれ、どのプロパティにもアクセスできます。次のようにエンティティエントリを更新すると問題が発生します。
public void UpdateEntity(Entities oldEnt, Entities newEnt)
{
using (Database db = new Database())
{
Entities ent = db.Entities.Where(e => e.EntityName == oldEnt.EntityName).FirstOrDefault();
ent.EntityName = newEnt.EntityName;
ent.EntityEmail = newEnt.EntityEmail;
...
ent.EntityType_ID = newEnt.EntityType_ID;
db.SaveChanges();
}
RefreshEntities();
}
public void RefreshEntities()
{
using (Database db = new Database())
{
db.Configuration.LazyLoadingEnabled = false;
db.SaveChanges();
EntityList = db.Entities.Include("Ref_EntityType").Include("Ref_EntityPosition").ToList<Entities>();
}
}
Ref_Entity は適切にロードされますが、Ref_Entity 内で Ref_Department は単に null になります。db.Entities.ToList<Entities>();
サイコロなしで、コンストラクターのように使用してみました。ご覧のとおり、LazyLoading をオフにしてみました (実際にフラグを適用するには、SaveChanges() を呼び出す必要があると思いました)。私も .Include("Ref_Department") を試しましたが、エンティティには存在しないと不平を言うだけで、これは理にかなっています。
UpdateEntity メソッドに渡す newEnt には初期化された Ref_Type がありません。UpdateEntity メソッドで変更されていないものはそのままであるという前提で作業しています...
だから今、私は何が起こっているのか、そしてそれを修正する方法について少し途方に暮れています. 誰かが私が間違っている場所を説明したり、コードを修正して機能させる方法についていくつかの指針を教えてくれたりできれば、それは素晴らしいことです.