【3】Blazor链接数据库

打印 上一主题 下一主题

主题 671|帖子 671|积分 2013

一、引入Nuget包

  1. Microsoft.EntityFrameworkCore
  2. Microsoft.EntityFrameworkCore.SqlServer
  3. Microsoft.EntityFrameworkCore.Tools
复制代码
二、添加链接字符串

   在文件appsetting.Json中添加ConnectionStrings配置信息
  1. {
  2.   "Logging": {
  3.     "LogLevel": {
  4.       "Default": "Information",
  5.       "Microsoft.AspNetCore": "Warning"
  6.     }
  7.   },
  8.   "ConnectionStrings": {
  9.     "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;"
  10.   },
  11.   "AllowedHosts": "*"
  12. }
复制代码
三、创建DbContext

   添加UserInfo的Model类
  1.     public class UseInfo
  2.     {
  3.         public int Id {  get; set; }
  4.         public string Name { get; set; }
  5.         public int Age {  get; set; }
  6.     }
复制代码
  添加TrendSimulationDbContext 数据库上下文类
  1. public class TrendSimulationDbContext : DbContext
  2. {
  3.     public TrendSimulationDbContext(DbContextOptions<TrendSimulationDbContext> options) : base(options)
  4.     {
  5.     }
  6.     protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  7.     {
  8.       
  9.     }
  10.     public DbSet<UseInfo> UserInfos { get; set; }
  11. }
复制代码
四、注入SqlServer数据库

  1. using Microsoft.AspNetCore.Components;
  2. using Microsoft.AspNetCore.Components.Web;
  3. using Microsoft.EntityFrameworkCore;
  4. using TrendSimulation;
  5. using TrendSimulation.Data;
  6. var builder = WebApplication.CreateBuilder(args);
  7. //查找配置信息
  8. IConfiguration configuration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory).AddJsonFile("appsettings.json").Build();
  9. builder.Services.AddRazorPages();
  10. builder.Services.AddServerSideBlazor();
  11. builder.Services.AddSingleton<WeatherForecastService>();
  12. //注入数据库,通过configuration 获取连接字符串配置信息
  13. builder.Services.AddDbContext<TrendSimulationDbContext>(options => options.UseSqlServer(configuration.GetConnectionString("DefaultConnection")));
  14. var app = builder.Build();
  15. // Configure the HTTP request pipeline.
  16. if (!app.Environment.IsDevelopment())
  17. {
  18.     app.UseExceptionHandler("/Error");
  19. }
  20. app.UseStaticFiles();
  21. app.UseRouting();
  22. app.MapBlazorHub();
  23. app.MapFallbackToPage("/_Host");
  24. app.Run();
复制代码
五、实验数据库迁移

   打开控制台
  

   实验迁移命令
  1. Add-Migration Init
  2. Update-database
复制代码
六、创建用户信息页面

   接口
  1. public interface IUserInfoService
  2. {
  3.      public void Add(UseInfo useInfo);
  4.      public void Update(UseInfo useInfo);
  5.      public void Delete(UseInfo useInfo);
  6.      public Task<UseInfo> Get(string name);
  7.      public Task<List<UseInfo>> First();
  8. }
复制代码
  实现用户信息的CRUD
  1. public class UserInfoSerivce : IUserInfoService
  2. {
  3.     public TrendSimulationDbContext _DbContext;
  4.     public UserInfoSerivce(TrendSimulationDbContext Context)
  5.     {
  6.         _DbContext = Context;
  7.     }
  8.     public void Add(UseInfo useInfo)
  9.     {
  10.         _DbContext.Add(useInfo);
  11.         _DbContext.SaveChanges();
  12.     }
  13.     public void Delete(UseInfo useInfo)
  14.     {
  15.         _DbContext.Add(useInfo);
  16.         _DbContext.SaveChanges();
  17.     }
  18.     public async Task<UseInfo> Get(string name)
  19.     {
  20.         return await _DbContext.UserInfos.FirstOrDefaultAsync(x => x.Name == "张三");
  21.     }
  22.     public async Task<List<UseInfo>> First()
  23.     {
  24.         return await _DbContext.UserInfos.ToListAsync();
  25.     }
  26.     public void Update(UseInfo useInfo)
  27.     {
  28.         _DbContext.Add(useInfo);
  29.         _DbContext.SaveChanges();
  30.     }
  31. }
复制代码
  在Program中注入服务
  1. builder.Services.AddScoped<IUserInfoService,UserInfoSerivce>();
复制代码
  创建Razor页面
  

   User.razor
  1. @page "/user"
  2. @{
  3. }
  4. //依赖注入UserInfoSerivce服务
  5. @inject IUserInfoService UserInfoSerivce
  6. @using TrendSimulation.Interface
  7. @using TrendSimulation.Service
  8. @using TrendSimulation.Model
  9. <div>
  10.     <label for="userInput">Enter something:</label>
  11.     //绑定属性
  12.     <input id="userName" @bind="userName" />
  13.     <input id="userAge" @bind="userAge" />
  14. </div>
  15. <div>
  16.     <button @onclick="Submit">Submit</button>
  17. </div>
  18. @if (useInfo == null)
  19. {
  20.     <p><em>Loading...</em></p>
  21. }
  22. else
  23. {
  24.     <table class="table">
  25.         <thead>
  26.             <tr>
  27.                 <th>NAME</th>
  28.                 <th>AGE</th>
  29.                
  30.             </tr>
  31.         </thead>
  32.         <tbody>
  33.                 //打印插入的用户数据
  34.             @foreach (var forecast in useInfo)
  35.             {
  36.                 <tr>
  37.                     <td>@forecast.Name</td>
  38.                     <td>@forecast.Age</td>
  39.                   
  40.                 </tr>
  41.             }
  42.         </tbody>
  43.     </table>
  44. }
  45. @code {
  46.     private string userName = string.Empty;
  47.     private int userAge ;
  48.     private List<UseInfo> useInfo;
  49.     private async void Submit()
  50.     {
  51.         UserInfoSerivce.Add(new UseInfo { Age = userAge, Name = userName });
  52.     }
  53.     //初始化,查询用户列表
  54.     protected override async Task OnInitializedAsync()
  55.     {
  56.         useInfo = (await UserInfoSerivce.First()) is null ? new List<UseInfo>() : (await UserInfoSerivce.First());
  57.     }
  58. }
复制代码
七、结果展示



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

愛在花開的季節

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表