Я создал пользовательский класс под названием Person
хранить имя, адрес и т.д. Этот класс/модель перекрестных ссылок от других моделей, в том числе ApplicationUser
:Почему мое пользовательское свойство объекта в ApplicationUser null?
public class ApplicationUser : IdentityUser
{
public Person Person { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
В одном из моих контроллеров, я использую следующие код, чтобы получить текущий пользователь вошел в систему и получить его Person
объект, например, так:
var user = UserManager.FindById(User.Identity.GetUserId());
var person = user.Person;
Мой Person
класс также определяется в ApplicationDbContext
:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("MyContext", throwIfV1Schema: false)
{
}
public DbSet<Person> People { get; set; }
}
Когда я проверяю user
, я вижу, что Entity Framework заполнил объект, потому что я вижу идентификатор пользователя, адрес электронной почты, пароль хэша, все! Все исключаяPerson
property! Тем не менее, я вижу в базе данных, что соответствующая строка не null
, но имеет правильный идентификатор для Person
.
Я новичок в структуре ASP.NET/MVC/Entity, и я прочитал, что по умолчанию использует ленивую загрузку. Это то, что я испытываю? Если да, как я могу сказать, что Entity использует активную загрузку в свойстве Person
? Если нет, что я делаю неправильно?
Убедитесь, что вы присвоили свойство 'Person' в методе' UserManager.FindById' ... –
1) Вы добавили 'IDbSet' в 'ApplicationDbContext'? & 2) Попытайтесь пометить свойство ApplicationUser.Person как виртуальное (так что класс прокси-сервера может лениво загрузить его). - Мне кажется, что БД не знает, что она существует как отношения и может потребоваться использовать неявные соглашения/атрибуты/текущую привязку к модели, чтобы рассказать об этом EF. –
@BradChristie 1) Да, это я определил в своем «ApplicationDbContext». 2) Я попробую отметить его как виртуальный. –