C# 如何在asp.net core blazor中的通用服务中使用任何模型

C# 如何在asp.net core blazor中的通用服务中使用任何模型,c#,asp.net,blazor,C#,Asp.net,Blazor,我目前在blazor应用程序中有一个服务和一个blazor组件,它从数据库视图检索数据,并允许用户更新数据。伟大的下一页。现在我有更多的东西可以让它做同样的事情。在我的项目中,每个数据库视图都有一个模型 我的问题是,我是否必须为每个模型创建一个服务?当然,有一种方法可以提供某种通用服务,在这种服务中,用户可以简单地传递模型,以便与之交互。我真的不确定我应该搜索什么才能在网上找到帮助。如果有人能给我指出正确的方向,我会很感激的 代码设置 namespace AdministrationWebApp

我目前在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();
        }
    }
}
命名空间管理webapplication.Models.Settings
{
公共部分类流设置视图
{
公共字节设置ID{get;set;}
公共字符串设置名称{get;set;}
公共对象设置值{get;set;}
}
}
命名空间管理webapplication.Data
{
公共分部类ApplicationDbContext:IdentityDbContext
{
公共应用程序DBContext(DbContextOptions选项)
:基本(选项)
{
}
公共虚拟数据库集FlowSettingsView{get;set;}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
基于模型创建(modelBuilder);
...
}
...
}
命名空间管理webapplication.Services
{
公共类数据服务
{
受保护的ApplicationDbContext_上下文{get;private set;}
公共数据服务(ApplicationDbContext上下文)
{
_上下文=上下文;
}
}
}
命名空间管理webapplication.Services
{
公共类设置服务:数据服务
{
公共设置服务(ApplicationDbContext上下文):基本(上下文){}
公共异步任务GetSettingsAsync()
{
return wait_context.FlowSettingsView.toListSync();
}
公共异步任务更新设置同步(列表流设置视图)
{
_context.FlowSettingsView.UpdateRange(FlowSettingsView);
return wait_context.saveChangesSync();
}
}
}
要了解我想做什么,请查看此版本的services类:

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();
        }
    }
}
namespace管理webapplication.Services
{
公共类GenericDataService:DataService
{
AnyModel\u AnyModel;
公共GenericDataService(ApplicationDbContext上下文,AnyModel AnyModel):基础(上下文)
{
_anyModel=anyModel;
}
公共异步任务GetDataAsync()
{
return wait_context.AnyModel.toListSync();
}
公共异步任务UpdateAnyModelAsync(列出任意模型)
{
_context.AnyModel.UpdateRange(AnyModel);
return wait_context.saveChangesSync();
}
}
}
而不是这个

public async Task<List<AnyModel>> GetDataAsync()
{
    return await _context.AnyModel.ToListAsync();
}
公共异步任务GetDataAsync() { return wait_context.AnyModel.toListSync(); } 你可以用

public async Task<List<T>> GetDataAsync<T>()
{
    return await _context.Set<T>().ToListAsync();
}
公共异步任务GetDataAsync() { 返回wait_context.Set().ToListAsync(); }
(或将该
移动到类级别).

谢谢您,先生!这几乎帮了我的忙。为了使这项工作正常进行,我需要将where T:class添加到方法的末尾。我避免添加到类中,因为这样在启动时,当我在ConfigureServices下添加服务时,我必须传入一个模型。我的方法现在看起来像这样:public async Task GetDataAsync()其中T:class{return await{u context.Set().ToListAsync();}是的,在需要T:class的地方,它会从DbContext冒泡出来。您可以注册“open generic”,但这取决于使用模式是否有用。