如何使用扩展 class table 检索数据?

How to retrieve data using the extended class table?

我正在尝试扩展 AbpUserNotifications table 以使其包含一些额外的列(包括 IsDeletedDeletionTime)。 到目前为止,它起作用了,我现在有了我需要的列。 但是,您可能知道,会自动生成一个名为 Discriminator 的列来注册与 class 相关的记录(父或子)。

问题是发布通知时,它是为父 class 发布的。因此,当我使用 subclass 检索数据时,结果中没有 returned,因为 Discriminator 列具有父 class 名称而不是 subclass名字.

有没有一种方法可以使用子 class 检索数据,即使它是为父 class 发布的? (意思是在检索数据时忽略Discriminator的值)。

该应用程序正在使用 ASP.NET 样板的内置发布,所有数据级交互均使用框架提供的 IRepository 完成。

这里是扩展的class代码:

public class ExtendedUserNotification : UserNotificationInfo
{
    public virtual bool IsDeleted { get; set; }
    public virtual long? DeleterUserId { get; set; }
    public virtual DateTime? DeletionTime { get; set; }

    public virtual string ExtraInformation { get; set; }

    [ForeignKey("TenantNotificationId")]
    public virtual TenantNotificationInfo TenantNotificationInfo { get; set; }
}

正如我上面提到的,实际结果是当我使用子class检索数据时,它没有return父class的数据。

预期和想要的结果是能够使用子class检索父class的数据,因为我需要在检索数据时使用新列应用一些过滤器.

谢谢。

这似乎是 XY Problem

问题是在发布通知时,它是为父 class 发布的。 (问题十)

您应该实现一个覆盖相关方法的自定义 Notification Store

覆盖 InsertUserNotificationAsync 以插入(发布)ExtendedUserNotification

public class ExtendedUserNotificationStore : NotificationStore
{
    private readonly IRepository<ExtendedUserNotification, Guid> _extendedUserNotificationRepository;
    private readonly IObjectMapper _objectMapper;
    private readonly IUnitOfWorkManager _unitOfWorkManager;

    public ExtendedUserNotificationStore(
        IRepository<NotificationInfo, Guid> notificationRepository, IRepository<TenantNotificationInfo, Guid> tenantNotificationRepository, IRepository<UserNotificationInfo, Guid> userNotificationRepository, IRepository<NotificationSubscriptionInfo, Guid> notificationSubscriptionRepository,

        IRepository<ExtendedUserNotification, Guid> extendedUserNotificationRepository,
        IObjectMapper objectMapper,
        IUnitOfWorkManager unitOfWorkManager)
        : base(notificationRepository, tenantNotificationRepository, userNotificationRepository, notificationSubscriptionRepository, unitOfWorkManager)
    {
        _extendedUserNotificationRepository = extendedUserNotificationRepository;
        _objectMapper = objectMapper;
        _unitOfWorkManager = unitOfWorkManager;
    }

    [UnitOfWork]
    public override async Task InsertUserNotificationAsync(UserNotificationInfo userNotification)
    {
        var extendedUserNotification = _objectMapper.Map<ExtendedUserNotification>(userNotification);

        using (_unitOfWorkManager.Current.SetTenantId(userNotification.TenantId))
        {
            await _extendedUserNotificationRepository.InsertAsync(extendedUserNotification);
            await _unitOfWorkManager.Current.SaveChangesAsync();
        }
    }
}

如果您想使用 IObjectMapper,则可以使用 AutoMapFrom 属性轻松配置映射。

[AutoMapFrom(typeof(UserNotificationInfo))] // Add this
public class ExtendedUserNotification : UserNotificationInfo
{
    // ...
}

有没有一种方法可以使用子 class 检索数据,即使它是为父 class 发布的? (解决方案 Y)

不,没有支持的方式。