У меня есть контекст тест настроить так:Null возвращается для отложенной загрузки
class TestAppContext : ContextInterface
{
public DbSet<Person> Persons {get; set;}
public DbSet<House> Houses { get; set; }
public TestAppContext()
{
this.Persons = new TestPersonDbSet();
this.Houses = new TestHousesDbSet();
}
public int SaveChanges(){
return 0;
}
public void MarkAsModified(Object item) {
}
public void Dispose() { }
}
модели выглядеть следующим образом:
class Person{
[Key]
public int id {get; set;}
public string name {get; set;}
}
class House{
[Key]
public int id {get; set;}
public string address {get; set;}
public int personId {get; set;}
[ForeignKey("personId")]
public virtual Person person {get; set;}
}
Теперь, если я запускаю этот тест блока:
[TestMethod]
public void GetServiceRequest_User()
{
TestAppContext context = new TestAppContext();
House house = new House() {id=1, address="Middle of Nowhere", personId=3};
Perosn person = new Person() {id=3, name="Some Dude"};
context.Houses.Add(house);
context.Persons.Add(person);
HousesController controller = new HousesController(context);
var resultRaw = controller.GetHouse(house.id);
Assert.IsInstanceOfType(resultRaw, typeof(OkNegotiatedContentResult<House>));
OkNegotiatedContentResult<House> result = resultRaw as OkNegotiatedContentResult<House>;
Assert.IsNotNull(result);
Assert.IsNotNull(result.Content.person);
Assert.AreEqual(result.Content.person.id, result.Content.personId);
Assert.AreEqual(result.Content.person.id, person.id);
}
Не удается, из-за того, что result.Content.person имеет значение null. Почему это? Человек, как я понимаю, должен лениво загружаться, так как идентификаторы совпадают, но это, похоже, не так.
Как Запрошенный метод GetHouse:
[Route("{id:int}", Name="DisplayHouse")]
[ResponseType(typeof(House))]
public IHttpActionResult GetHouse(int id)
{
House house = db.Houses.Find(id);
if (house == null)
{
return NotFound();
}
return Ok(house);
}
показать нам HouseController –
@RobertLevy добавил метод получения выше. Контроллер является базовым контроллером. – steventnorris
это не имеет ничего общего с ленивой загрузкой; прямо сейчас нет никакого вызова 'SaveChanges()', поэтому вызов класса с другим контекстом для получения того, что был добавлен в первом контексте, никогда не найдет ничего, потому что в базу данных ничего не было добавлено. – Claies