Почему LINQ без Inlcude
возвращает null для ссылки на другую модель?LINQ without Include возвращает null
Модели
public class ApplicationUser : IdentityUser
{
public FilePath FilePath { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
return userIdentity;
}
}
public class FilePath
{
public int FilePathId { get; set; }
[StringLength(255)]
public string FileName { get; set; }
public FileType FileType { get; set; }
}
public enum FileType
{
Avatar = 1,
Photo = 2,
Study = 3
}
Контроллер
private ApplicationDbContext db = new ApplicationDbContext();
public ActionResult Details(string id)
{
//...
ApplicationUser appUser1 = db.Users.Find(id);
ApplicationUser appUser2 = db.Users.Include(i => i.FilePath).SingleOrDefault(i => i.Id == id);
if(appUser1.FilePath == null); //null
if(appUser2.FilePath == null); //not null, has all data
return View(appUser2);
}
Что вы ожидаете от него, если вы не используете * .Include'? Почему это не должно быть нулевым? –
@KirkWoll Итак, мне нужно использовать Include для * каждой * ссылки, которую я добавляю в своей модели? – SMUsamaShah
Или используйте проекцию '.Select'. Или включите [ленивую загрузку] (https://msdn.microsoft.com/en-us/data/jj574232.aspx?f=255&MSPPError=-2147217396#lazy). (Я настоятельно рекомендую вам не использовать ленивую загрузку в сценарии производства, так как это может привести к неэффективной работе базы данных при использовании в цикле.) –