1

Моя база данных настроена с таблицей Entity, которая имеет свойство навигации Ref_Type (и FK, которое ссылается на TypeID). Таблица типов, имеет Ref_Department, ту же настройку FK. Наконец, таблица Департамента имеет Ref_Locale и ту же настройку FK.Lazy Загрузка и несколько ссылок

Я сохраняю объекты в списке, который является свойством одноэлементного. Он создается следующим образом;

private Singleton() 
{ 
    using (Database db = new Database()) 
    { 
     List<Entities> EntityList = db.Entities.ToList<Entities>(); 
    } 
} 

Это нормально, свойства навигации ВСЕ загружаются, и я могу получить доступ к любому из них. Проблема возникает, когда я обновляю запись Entity следующим образом;

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 только нуль. Я пробовал просто использовать db.Entities.ToList<Entities>();, как в моем конструкторе, без кубиков. Как вы можете видеть, я также пытался отключить LazyLoading (я подумал, что мне может потребоваться вызвать SaveChanges(), чтобы он действительно применил флаг). Я также попробовал .Include («Ref_Department»), но он просто жалуется, что он не существует для Entities, что имеет смысл.

Newent, что я перехожу к методу UpdateEntity не Ref_Type инициализирован, я работаю в предположении, что ничего не изменилось в методе UpdateEntity бы просто остаться такой же ...

Так что теперь я m в немного потери относительно того, что происходит и как это исправить. Если бы кто-нибудь мог объяснить, где я ошибаюсь, или дать мне несколько указаний о том, как исправить мой код, чтобы он работал, это было бы здорово.

+0

Вы получаете его, когда вы включили ленивую загрузку в методе RefreshEntities() –

+0

По умолчанию включена ленивая загрузка ... однако я только что нашел решение и опубликую его в ближайшее время. – Trent

ответ

1

По прихоти, я модифицировал RefreshEntities();

EntityList = db.Entities.Include("Ref_EntityPosition").Include("Ref_EntityType"). 
    Include("Ref_EntityType.Ref_Department"). 
    Include("Ref_EntityType.Ref_Department.Ref_Locale").ToList<Entities>(); 

И теперь я получаю все ссылки.

Я все еще не уверен, почему он будет загружать все ссылки в конструкторе, но не в методе RefreshEntities(), даже если вызовы идентичны, но это решает проблему, поэтому я достаточно доволен, чтобы оставить ее таким образом ,

+1

Обратите внимание, что вы можете использовать [метод расширения из System.Data.Entity] (http://msdn.microsoft.com/en-us/library/gg671236%28v=vs.103%29.aspx): 'db.Entities .Include (e => e.NavigationProperty) .Include (e => e.NavigationProperty) ' – abatishchev

+0

О! Отлично! Благодаря :) – Trent