c# - 扩展实体并使用 IRepository
问题描述
我们正在使用 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 中试图做的是找到 OrganisationUnit,而不是 OrganizationUnit。然而什么也没找到。使用 .GetAll() 突出显示了此处的 IRepository 未在扩展表上返回任何结果的问题。
解决方案
您需要将新的 DbSet 添加到您的 DbContext。并添加迁移。
public class AbpZeroTemplateDbContext : AbpZeroDbContext<Tenant, Role, User, AbpZeroTemplateDbContext>, IAbpPersistedGrantDbContext
{
//...
public virtual DbSet<OrganisationUnit> MyOrganizationUnits { get; set; }
//...
}
扩展 OrganizationUnit 的步骤
- 创建一个继承自 OrganizationUnit 的新类,例如 ExtendedOrganizationUnit
- 将 ExtendedOrganizationUnit 的新 DbSet 添加到 DbContext。
- 添加添加的迁移
- 更新数据库(看到更改成功)
见https://forum.aspnetboilerplate.com/viewtopic.php?f=5&t=11109&hilit=extend
推荐阅读
- xml - 使用 XPath 查询 XML 数据时如何删除 Postgres 中的大括号
- c# - Resource.id 有一个定义 xamarin err
- command - antlr 中的 Lexer 命令“更多”与预期值不匹配
- mule - 波兰语字符的编码类型
- java - 我不知道 VScode 在哪里找到 JAVA_HOME 环境变量
- rxjs - RxJS:即使在源 observable 上使用了 `shareReplay()`,`throwError()` 也会为每个 observable 单独执行
- nginx - Nginx 和 Fontawesome v5 问题
- google-cloud-platform - 创建数据库用户时 GCP 部署管理器“ResourceErrorCode”:“400”
- c++ - 如何将 boost::hana::tuple 转换为 std::variant
- design-patterns - 读取优化副本的最佳设计是什么?