Объект со свойством ApplicationUser, когда я использую его в сервисе, свойство имеет значение null - PullRequest
0 голосов
/ 07 января 2019

У меня есть сущность под названием CarOwner. У каждого автовладельца есть свойство ServiceAppUser AutoService. Когда я добавляю новый CarOwner, я использую метод Create в CarOwnerService

В SSMS все выглядит хорошо.

Но когда я нажал на метод Details и попытался получить CarOwner с помощью GetById, в CarOwnerService я обнаружил CarOwner с AutoService == null и коллекцию Cars == null

public class CarOwner : BaseModel<int>
{
    public CarOwner()
    {
        this.Cars = new HashSet<Car>();
    }

    public string Name { get; set; }

    public string Bulstat { get; set; }

    public string Address { get; set; }

    public string City { get; set; }

    public string MRP { get; set; }

    public string Email { get; set; }

    public string Telephone { get; set; }

    public virtual ICollection<Car> Cars { get; set; }

    public decimal Obligation { get; set; }

    public string ServiceAppUserId { get; set; }

    public virtual ServiceAppUser AutoService { get; set; }
}


public class CarOwnerService : ICarOwnerService
{
    private IRepository<CarOwner> carOwnerRepository;
    private IMapper mapper;

    public CarOwnerService(IRepository<CarOwner> carOwnerRepository, IMapper mapper)
    {
        this.carOwnerRepository = carOwnerRepository;
        this.mapper = mapper;
    }

    public async Task<int> Create(CarOwnerCreateViewModel model, ServiceAppUser user)
    {

        var carOwner = mapper.Map<CarOwner>(model);
        carOwner.AutoService = user;

        await this.carOwnerRepository.AddAsync(carOwner);
        await this.carOwnerRepository.SaveChangesAsync();

        var id = carOwner.Id;

        return id;
    }



    public CarOwner GetById(int id)
    {
        var allCarOwners = this.carOwnerRepository.All();
        var carOwner = allCarOwners.FirstOrDefault(o => o.Id == id);

        return carOwner;
    }

    public IEnumerable<CarOwnerViewModel> GetAll()
    {

        var all = this.carOwnerRepository.All().ToList().Select(co => mapper.Map<CarOwnerViewModel>(co));

        return all;
    }
}

Ответы [ 2 ]

0 голосов
/ 08 января 2019

это мой IRepository, и да, я использую EF Core

public interface IRepository<TEntity>
 where TEntity : class
{
    IQueryable<TEntity> All();

    bool Contains(TEntity entity);

    Task AddAsync(TEntity entity);

    void Delete(TEntity entity);

    Task<int> SaveChangesAsync();
}

И это моя реализация IRepository:

public class DbRepository<TEntity> : IRepository<TEntity>, IDisposable
    where TEntity : class
{
    private readonly ServiceAppContext context;
    private DbSet<TEntity> dbSet;

    public DbRepository(ServiceAppContext context)
    {
        this.context = context;
        this.dbSet = this.context.Set<TEntity>();
    }

    public Task AddAsync(TEntity entity)
    {
        return this.dbSet.AddAsync(entity);
    }

    public IQueryable<TEntity> All()
    {
        return this.dbSet;
    }

    public void Delete(TEntity entity)
    {
        this.dbSet.Remove(entity);
    }

    public Task<int> SaveChangesAsync()
    {
        return this.context.SaveChangesAsync();
    }

    public void Dispose()
    {
        this.context.Dispose();
    }

    public bool Contains(TEntity entity)
    {
        return this.dbSet.Contains(entity);
    }
}
0 голосов
/ 08 января 2019

Я не уверен, но, похоже, вы используете Entity Framework Core или другой ORM, потому что вы упомянули SSMS.

Не видя вашу реализацию IRepository, трудно быть уверенным, но обычно проблема, которую вы описываете, заключается в том, что вы не сказали ORM включить другие части вашего графа объектов.

Например

dbContext.CarOwners
         .Include(c => c.Cars)
         .Include(c => c.AutoService)
         .Select(c => c);

Вернет все ваши объекты с заполненными Cars и AutoService.

ПРЕДУПРЕЖДЕНИЕ Будьте внимательны, только Include - это именно то, что вам нужно для любого вызова, иначе вы в конечном итоге загрузите слишком много данных и замедляете работу приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...