Я сделал все чтения, которые я могу найти на Entity и ленивой загрузке, а также другие вопросы здесь, но для жизни меня я не могу заставить эту работу работать. Вот мой SQL для БД:C# Entity Framework Lazy Loading Is not Loading
CREATE TABLE corporations(
corporationID bigint PRIMARY KEY
);
CREATE TABLE Character(
personID bigint PRIMARY KEY,
corporationID int NOT NULL,
FOREIGN KEY (corporationID) REFERENCES corporations(corporationID)
);
И код Entity, чтобы получить его (* EDITED от оригинала, все еще сломана *):
DBEntities context = new DBEntities();
public Character Character_GetByID(long CharacterID)
{
context.ContextOptions.LazyLoadingEnabled = true;
Character character = context.Characters.Where(c => c.CharacterID == CharacterID).FirstOrDefault();
return character;
}
Так от моего понимания, с этим Я должен уметь
Character char = Character_GetByID(characterID);
Corporation corp = char.Corporation;
Объект «char.Corporation» существует, Entity создала его должным образом из eign. Но когда я запускаю вышеуказанный код, «corp» всегда возвращается как NULL (хотя я точно знаю, что соответствующая корпорация находится в БД).
Одна вещь, которую я действительно замечал, что в автоматически генерируемой Entity объекта Персонажа, он имеет функцию:
public virtual Corporation Corporation
{
get { return _corporation; }
set
{
if (!ReferenceEquals(_corporation, value))
{
var previousValue = _corporation;
_corporation = value;
FixupCorporation(previousValue);
}
}
}
Что кажется странным, потому что я предположил бы, что с отложенной загрузки функция «получить» будет что-то вроде «если null, попробуйте получить Корпорации из базы данных». Любые мысли будут высоко оценены.
* EDIT * Запрос как отложенной загрузки настраивается:
В моем классе Context для каждого конструктора У меня есть
this.ContextOptions.LazyLoadingEnabled = true;
И как вы можете видеть из первого C# выше, я попытался установить его как истину в самой функции непосредственно перед ее запросом.
Могли бы вы вставить как вы настроили отложенную загрузку? – ivowiblo
использовать .Include (x => x.Corporation); – Greens
@ivowiblo: Я добавил редактирование, чтобы показать, что я сделал с конфигурацией LazyLoading, но если есть какая-то конфигурация, я полагаю, что я не знаю об этом – Jordan