2015-06-16 3 views
4

у меня есть расширенный класс IdentityUser, который содержит ссылку на другую организацию на моей БД, но всякий раз, когда я пытаюсь получить Пользователь с UserManager, упоминаемая сущность всегда приходит пустой:EF7 Идентичности не загружается пользователем расширенных свойств

Моя реализация класса User

public class Usuario : IdentityUser 
{ 
    public int ClienteID { get; set; } 
    public virtual Cliente Cliente { get; set; } 
} 

контроллер, который использует свойство ссылается на пользователя

[Authorize] 
[HttpGet] 
public async Task<Direccion> GET() 
{ 
    var usuario = await UserManager.FindByNameAsync(Context.User.Identity.Name); 
    // Cliente will always be null 
    return usuario.Cliente.Direccion; 
} 

Я также попытался удалить Вирт ual ключевое слово из ссылки, так что он ленивый загружен, но я не уверен, что это уже реализовано на EF7.

Любые идеи о том, как достичь этого?

+1

duplicate? http://stackoverflow.com/questions/26324550/accessing-navigation-properties-from-identityuser-when-lazyloading-is-off –

+0

Я думал, что удаление ключевого слова virtual позволит загружать загрузку так, что мне не придется менять реализация (добавление включает) –

+1

Вы по-прежнему нуждаетесь в включении для активной загрузки связанных объектов. https://msdn.microsoft.com/en-us/data/jj574232.aspx#eager –

ответ

1

У меня был этот вопрос, и он решил его с помощью EF Core Documentation. Вам нужно использовать метод Include для получения соответствующих данных. В моем случае:

Entity Класс:

public class ServiceEntity 
{ 
    public int ServiceId { get; set; } 
    public int ServiceTypeId { get; set; } 

    public virtual ServiceTypeEntity ServiceType { get; set; } 

} 

Доступ мой DbContext объект:

public ServiceEntity GetById(int id) 
{ 
    var service = this.DbClient.Services.Include(s => s.ServiceType).Where(c => c.ServiceId == id).FirstOrDefault(); 

    return service; 
} 

Я должен был сделать свойство "виртуальный", а также. Мое понимание EF Core должно быть в состоянии переопределить свойства связанного объекта, чтобы заполнить значения.

Кроме того, начиная с этой даты, EF Core еще не поддерживает Lazy Loading, только Eager Loading and Explicit Loading.

Надеюсь, это поможет!

+1

Если вам нужно пройти более одного свойства (т. Е. Отношение «многие ко многим», где используется промежуточная таблица для сопоставления a с b), вы можете использовать '.Include (s => s.ServiceCollection) .ThenInclude (sc => sc.ServiceType) 'для включения нескольких уровней связанных данных. Подробнее см. На странице https://docs.microsoft.com/en-us/ef/core/querying/related-data. –

Смежные вопросы