Как включить связанные данные из общей таблицы, когда навигационные свойства недоступны?C#

Место общения программистов C#
Ответить
Anonymous
 Как включить связанные данные из общей таблицы, когда навигационные свойства недоступны?

Сообщение Anonymous »

Я строю основной веб -API ASP.NET, следуя чистой архитектуре, CQRS и репозиторию + EF Core + шаблоны спецификации. Поскольку это общая таблица, я не могу использовать навигационные свойства от таких организаций, как продукт, к изображению. < /P> Entity:

Код: Выделить всё

public class Image : EntityBase
{
[Required]
public string Url { get; set; } = string.Empty;

[Required]
public Guid EntityId { get; set; }

[Required]
public EntityType EntityType { get; set; } // enum: Product, Company, etc.

public DateTime CreatedAt { get; set; }
}
< /code>
Product
Entity:

Код: Выделить всё

public class Product : EntityBase
{
[Required, MaxLength(150)]
public string Name { get; set; } = string.Empty;

public string? Description { get; set; }

[Required]
public Guid CompanyId { get; set; }
public Company? Company { get; set; }

[Required]
public Guid? ThumbnailImageId { get; set; }

public ICollection Items { get; set; } = [];

public DateTime CreatedAt { get; set; }
}
< /code>
In my CQRS query handler, I use a specification to filter and paginate products, and then project them into a DTO:
public class GetProductsQueryHandler : IRequestHandler>
{
private readonly IRepository _productRepository;
private readonly IRepository _imageRepository;

public GetProductsQueryHandler(IRepository productRepository, IRepository imageRepository)
{
_productRepository = productRepository;
_imageRepository = imageRepository;
}

public async Task Handle(GetProductsQuery request, CancellationToken cancellationToken)
{
var spec = new ProductSearchSpecification(request.ProductFilter, request.PageNumber, request.PageSize);

Expression selector = product => new ProductResponse(
product.Id,
product.Name,
product.Description,
product.Company!.Name,
product.CompanyId,
product.CreatedAt
// How to include the image URL here?
);

var products = await _productRepository.GetPaggedListAsync(spec, selector, cancellationToken);

return Result.Success(products);
}
}
< /code>
[b]My question[/b]: how can I cleanly (Best Practices) and efficiently include the thumbnail image URL (from the Image
Таблица) в каждом объекте ProductTresponse , учитывая, что у меня есть только ThumbNailImageId , и это изображение является таблицей общего назначения, используемой многими сущностями? GetByIdasync , getPaggedListAsync и другие общие методы CRUD.


Подробнее здесь: https://stackoverflow.com/questions/796 ... erties-are
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»