首页 > 解决方案 > 如何在 asp.net core blazor 的通用服务中使用任何模型

问题描述

我目前在我的 blazor 应用程序中有一个服务和一个 blazor 组件,它从数据库视图中检索数据并允许用户更新数据。伟大的!这是一页下来。现在我有更多的东西可以做同样的事情。在我的项目中,每个数据库视图都有一个模型。

我的问题是,我必须为每个模型创建一个服务吗?当然,有一种方法可以提供某种通用服务,人们可以简单地传入模型以与之交互。我不确定我应该在网上寻找什么来寻求帮助。如果有人甚至可以指出我正确的方向,我将不胜感激。

代码设置

namespace AdministrationWebApplication.Models.Settings
{
    public partial class FlowSettingsView
    {
        public byte SettingId { get; set; }
        public string SettingName { get; set; }
        public object SettingValue { get; set; }
    }
}


namespace AdministrationWebApplication.Data
{
    public partial class ApplicationDbContext : IdentityDbContext
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }

        public virtual DbSet<FlowSettingsView> FlowSettingsView { get; set; }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
          base.OnModelCreating(modelBuilder);
          ...
        }
    ...
}

namespace AdministrationWebApplication.Services
{
    public class DataService
    {
        protected ApplicationDbContext _context { get; private set; }

        public DataService(ApplicationDbContext context)
        {
            _context = context;
        }
    }
}

namespace AdministrationWebApplication.Services
{
    public class SettingsService : DataService
    {
        public SettingsService(ApplicationDbContext context) : base(context) {}

        public async Task<List<FlowSettingsView>> GetSettingsAsync()
        {
            return await _context.FlowSettingsView.ToListAsync();
        }

        public async Task<int> UpdateSettingsAsync(List<FlowSettingsView> flowSettingsView)
        {
            _context.FlowSettingsView.UpdateRange(flowSettingsView);           
            return await _context.SaveChangesAsync();
        }
    }
}

要了解我想要做什么,请查看此版本的服务类:

namespace AdministrationWebApplication.Services
{
    public class GenericDataService : DataService
    {
        AnyModel _anyModel;

        public GenericDataService(ApplicationDbContext context, AnyModel anyModel) : base(context) 
        {
         _anyModel = anyModel;
        }

        public async Task<List<AnyModel>> GetDataAsync()
        {
            return await _context.AnyModel.ToListAsync();
        }

        public async Task<int> UpdateAnyModelAsync(List<AnyModel> anyModel)
        {
            _context.AnyModel.UpdateRange(anyModel);           
            return await _context.SaveChangesAsync();
        }
    }
}

标签: c#asp.netblazor

解决方案


而不是这个

public async Task<List<AnyModel>> GetDataAsync()
{
    return await _context.AnyModel.ToListAsync();
}

你可以使用

public async Task<List<T>> GetDataAsync<T>()
{
    return await _context.Set<T>().ToListAsync();
}

(或将其<T>移至班级级别)。


推荐阅读