У меня есть .net core rest api, который содержит гибридную структуру, в которой он содержит только репозитории, а не уровень обслуживания.
Теперь есть одна проблема, с которой я сталкиваюсь с базовым репозиторием и основной структурой. позвольте мне сначала объяснить проблему.
Итак, рассмотрим одну сущность. скажем, Продукт и ниже это определение для этой сущности. у этой сущности есть один базовый класс с именем FullAuditedEntity .
[Table(name: "Products")]
public class Product : FullAuditedEntity
{
public string Name { get; set; }
}
public class FullAuditedEntity: IFullAuditedEntity
{
public FullAuditedEntity() { }
[Key]
public virtual int Id { get; set; }
}
public interface IFullAuditedEntity
{
int Id { get; set; }
}
Хранилище Base и его интерфейсы, как показано ниже.
public class EntityBaseRepository<T> : IEntityBaseRepository<T> where T : class, IFullAuditedEntity, new()
{
private readonly ApplicationContext context;
public EntityBaseRepository(ApplicationContext context)
{
this.context = context;
}
public virtual IEnumerable<T> items => context.Set<T>().AsEnumerable().OrderByDescending(m => m.Id);
public virtual T GetSingle(int id) => context.Set<T>().FirstOrDefault(x => x.Id == id);
}
public interface IEntityBaseRepository<T> where T : class, new()
{
IEnumerable<T> items { get; }
T GetSingle(int id);
}
Итак, мой Хранилище продуктов будет таким.
public interface IProductRepository : IEntityBaseRepository<Product> { }
public class ProductRepository : EntityBaseRepository<Product>, IProductRepository
{
private readonly ApplicationContext context;
public ProductRepository(ApplicationContext context) : base(context: context)
{
this.context = context;
}
}
Теперь, до этого момента все хорошо, я могу получить доступ к этому хранилищу в контроллерах и выполнять действия, перечисленные в базовом классе.
Проблема ЯСтолкнувшись: Итак, с этой структурой, если я попытаюсь добавить любую новую сущность без FullAuditedEntity (см. сущность Product выше, у меня там есть полностью аудируемая сущность базового класса), моя структура хранилища завершится сбоем и выдаст ошибку.
скажем, если я пытаюсь добавить новую сущность Реализация , и у этой новой сущности есть случайный идентификатор, поэтому я не хочу наследовать базовый класс FullAuditedEnitity. теперь в этом случае большая часть будет работать нормально, но когда я попытаюсь создать репозиторий для объекта реализации, он выдаст общую ошибку. см. ниже снимок этого.
То, что я пробовал до сих пор ...
Я думалсоздать параллельное базовое хранилище, которое не наследует FullAuditedEntity как универсальный класс, но я не уверен, что это лучший метод или нет. Также меня беспокоит то, что что, если я делаю какую-либо ошибку в моей нынешней структуре шаблона репозитория и внедрения зависимостей?
Любой мир помощи будет лучшим и действительно оцененным.
Заранее благодарим за ваше время.