На данный момент есть такой интерфейс репозитория
public interface IRepository
{
DbSet<Sub> Subs { get; set; }
IEnumerable<Comment> Comments { get; }
IEnumerable<Review> Reviews { get; }
IEnumerable<Application> Applications { get; }
IEnumerable<Tender> Tenders { get; }
IEnumerable<Offer> Offers { get; }
IEnumerable<SubGroup> SubGroups { get; }
}
И конкретная реализация с помощью EntityFramework
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>, IRepository
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
}
public DbSet<Post> Posts { get; set; }
public DbSet<Attachment> Attachments { get; set; }
public DbSet<User_Meta> User_Meta { get; set; }
public DbSet<Post_Meta> Post_Meta { get; set; }
public DbSet<Category> Categories { get; set; }
public DbSet<SubGroup> SubGroups { get; set; }
public DbSet<Sub> Subs { get; set; }
public IEnumerable<Comment> Comments { get { return Posts.OfType<Comment>().AsEnumerable(); } }
public IEnumerable<Review> Reviews { get { return Posts.OfType<Review>().AsEnumerable(); } }
public IEnumerable<Application> Applications { get { return Posts.OfType<Application>().AsEnumerable(); } }
public IEnumerable<Tender> Tenders { get { return Posts.OfType<Tender>().AsEnumerable(); } }
public IEnumerable<Offer> Offers { get { return Posts.OfType<Offer>().AsEnumerable(); } }
}
Для каждой таблицы должны быть методы Create,Update,Delete, что IEnumerable не предоставляет. Как будет правильно: использовать приведение типов в коде, когда требуется произвести изменения в определенной таблицы, или учесть это в интерфейсе?