//Объект
public class Fcu : Entity<int>
{
public string Name { get; set; }
public int FcuTypeId { get; set; }
public virtual FcuType FcuType { get; set; }
}
//Навигационное свойтво
public class FcuType : Entity<int>
{
//ctor
public string Name { get; set; }
public virtual ICollection<Fcu> Fcus { get; set; }
}
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<Func<T, bool>> where)
{
return _dbSet.Where(where).FirstOrDefault<T>();
}
当我在调试中打开结果视图时:然后导航属性被填充(据我所知,数据库有额外的过度增长)
需要做什么才能使对象加载导航属性?使用Include?那我为什么要LazyLoading呢?
更新
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) }