c# - 如何在 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();
}
}
}
解决方案
而不是这个
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>
移至班级级别)。
推荐阅读
- python - 在 http.client 或 python-requests 中获取 http 原始(未解析)响应
- excel - 计算每个类别的 "ok" 更新数,但如果值更改为 "rej" 或 "blank",则停止计算
- c++ - 提升图复制filtered_graph
- c# - 我们可以在不使用编码的情况下将 Url 表单视图末尾的右括号“)”传递给控制器吗
- android - android-数据绑定-数据绑定后添加文本
- pandas - 尝试使用日期轴不同方法对组进行子图
- firebase - 如何在颤振应用程序中使用计时器来更改数据?
- android - Firebase:任何方式来定义一个“任何”节点?
- python - S3 图像的大规模处理
- mongodb - MongoDB在嵌入文档中找到最大值