//Объект
public class Fcu : Entity
1. Контроллер
[HttpPost]
public ActionResult Add(FcuCreateViewModel model)
{
if (!ModelState.IsValid)
return PartialView("~/Views/Fcu/_Add.cshtml", model);
var entity = new Fcu();
entity.Name = model.Name;
entity.FcuTypeId = model.SelectedFcuTypeId;
// 1. Сохраняем
_fcuService.Save(entity);
// 2. Сохранили, теперь нужно его вытащить, нужен объект с уже
// заполненным Id, т.к. Id не известен передаем Name
var result = _fcuService.GetByName(model.Name);
return Json(new { Fcu = result, Error = string.Empty });
}
2. Сервис
public Fcu GetByName(string name)
{
var result = _fcuRepository.Get(x => x.Name == name);
return result;
}
3. Репозиторий
public T Get(Expression
Навигационное свойство пустое:
Когда в отладке раскрываю Results View: то навигационное свойство заполняется (как я понял идет дополнительный зарос к базе)
Что нужно сделать чтобы объект загружался с навигационными свойтвами?
Использовать Include? То зачем мне тогда LazyLoading?
Update
LazyLoading у меня работает, вот для примера возьмем два теста (где _sut это FcuService):
// Тест - Проходит
// в этом тесте я ищу запись по имени
// и получаю заполненные поля + навиг. свойтво. все как должно быть.
[Test]
public void Should_Get_Fcu_By_Name()
{
var result = _sut.GetByName("Fcu1");
result.FcuType.Should().NotBeNull();
}
//Тест - Не проходит
//В этом тесте добавлю в бд новую запись и хочу ее загрузить, но мне
//возвращается объект с пустым навигационным свойством, т.е контекст не
//ищет объект в базе а просто отдает то что ему передал для сохранения
[Test]
public void Should_Insert_New_Fcu_And_Load_Back()
{
var fcu = new Fcu { Name = "newFcu", FcuTypeId = 1 };
_sut.Save(fcu);
var result = _sut.GetByName("newFcu");
result.FcuType.Should().NotBeNull();
}
Ответ
При создании указывайте связанный объект, а не его Id: var fcu = new Fcu { Name = "newFcu", FcuType=_fcuTypeRepo.Get(x=>x.Id==1) }
Комментариев нет:
Отправить комментарий