Расширение сущности и использование IRepository - PullRequest
0 голосов
/ 02 июля 2018

Мы используем ASP.NET Zero / BoilerPlate и столкнулись со следующей проблемой при расширении неабстрактной сущности и доступе к данным с помощью IRepository.

Я расширил сущность OrganizationUnit до OrganisationUnit, поэтому можно добавить некоторые дополнительные свойства, например:

public class OrganisationUnit : OrganizationUnit
    {
        public virtual bool IsCompany { get; set; }

        /// <summary>
        /// Initializes a new instance of the <see cref="OrganisationUnit"/> class.
        /// </summary>
        public OrganisationUnit()
        {

        }

        /// <summary>
        /// Initializes a new instance of the <see cref="OrganisationUnit"/> class.
        /// </summary>
        /// <param name="tenantId">Tenant's Id or null for host.</param>
        /// <param name="displayName">Display name.</param>
        /// <param name="parentId">Parent's Id or null if OU is a root.</param>
        public OrganisationUnit(int? tenantId, string displayName, long? parentId = null) : base(tenantId, displayName, parentId)
        {

        }
    }

Однако, когда мы пытаемся использовать IRepository, результатов нет, например:

public class OrganisationUnitManager : IDomainService
{
    private readonly IRepository<OrganisationUnit, long> _organisationUnitRepository;
    private readonly IRepository<Abp.Organizations.OrganizationUnit, long> _organizationUnitRepository;

    public OrganisationUnitManager(IRepository<OrganisationUnit, long> organisationUnitRepository, IRepository<Abp.Organizations.OrganizationUnit, long> organizationUnitRepository)
    {
        _organisationUnitRepository = organisationUnitRepository;
        _organizationUnitRepository = organizationUnitRepository;
    }

    public async Task<Abp.Organizations.OrganizationUnit> GetOUForEmployee(Employee.Employee employee)
    {
        var orgUnit = _organisationUnitRepository.FirstOrDefault(ou => ou.Id == employee.OrganizationUnitId);
        var orgS = _organisationUnitRepository.GetAll(); // Returns 0 Results - with the extended columns
        var orgZ = _organizationUnitRepository.GetAll(); // Returns All Records in AbpOrganizationUnits without the extended columns.
        return orgUnit;
    }
}

Что я пытаюсь сделать в GetOUForEmployee, так это найти Организационный блок, а не Организационный блок. Однако ничего не найдено. Использование .GetAll () подчеркивает проблему в том, что IRepository здесь не возвращает никаких результатов в расширенной таблице.

1 Ответ

0 голосов
/ 02 июля 2018

Вам необходимо добавить новый DbSet в ваш DbContext. И добавьте миграцию.

public class AbpZeroTemplateDbContext : AbpZeroDbContext<Tenant, Role, User, AbpZeroTemplateDbContext>, IAbpPersistedGrantDbContext
{
     //...

     public virtual DbSet<OrganisationUnit> MyOrganizationUnits { get; set; }

     //...
}

Шаги по расширению OrganizationUnit

  • Создайте новый класс, такой как ExtendedOrganizationUnit, который наследуется от OrganizationUnit
  • Добавьте новый DbSet для ExtendedOrganizationUnit в DbContext.
  • Добавить добавленную миграцию
  • Обновление базы данных (увидели изменение успешно)

См. https://forum.aspnetboilerplate.com/viewtopic.php?f=5&t=11109&hilit=extend

...