目录

介绍

背景

先决条件

使用代码

创建数据库和表

步骤1:创建ASP.NET Core Blazor服务器应用程序

运行测试应用程序

步骤2:安装软件包

连接字符串

步骤3:建立模型类

创建DBContext CLASS

创建服务类

步骤4:将服务和DbContext添加到Startup.cs

步骤5:使用客户项目

添加Razor组件

Import部分

HTML设计和数据绑定部分

函数部分

导航菜单

生成并运行应用程序

兴趣点


  • 下载源405 KB

介绍

在本文中,我们将详细介绍如何使用Entity Framework Core Raw SQL在我们的ASP.NET Core Blazor应用程序中执行存储过程。

原始SQL查询最常用于所有关系数据库,因为它可以返回常规实体类型或无键实体类型。就像我们使用具有大量关系表和许多页面的大型数据库一样,我们需要通过从许多表中进行联接来绑定和显示表详细信息,例如,如果要显示销售报告,在这种情况下,我们需要加入多个表,例如公司主数据,工厂主数据、客户主数据、物料主数据、生产结果和销售结果。在这种情况下,最好的选择是将其设置为存储过程,有时,很难为一个存储过程中的多个联接定义实体。在这些情况下,我们可以使用此Raw SQL查询,而无需定义实体,我们可以直接执行存储过程并将结果绑定到Blazor应用程序中。

在本文中,我们将看到如何创建存储过程,以使用EF Core Raw SQL查询在Blazor应用程序中搜索和绑定客户详细信息,以执行带有搜索参数的存储过程。

背景

先决条件

  • Visual Studio 2019 16.3或更高版本
  • .NET Core 3.0 SDK

使用代码

创建数据库和表

我们将使用带有存储过程的原始SQL查询示例中的SQL Server数据库。首先,我们将创建一个名为CustDB的数据库和一个名为CustMasterTBL的表。这是用于创建数据库表和表中的样本记录insert查询的SQL脚本。搜索存储过程。

-- =============================================
-- Author : Shanu
-- Create date : 2020-10-15
-- Description :
-- Latest
-- Modifier : Shanu
-- Modify date : 2020-10-15
-- =============================================
--Script to create DB,Table , sample Insert data   and Stored Procedure
USE MASTER
GO
-- 1) Check for the Database Exists .If the database is exist then drop and create new DB
IF EXISTS (SELECT [name] FROM sys.databases WHERE [name] = 'CustDB' )
DROP DATABASE CustDB
GO   CREATE DATABASE CustDB
GO   USE CustDB
GO   CREATE TABLE [dbo].[CustMasterTBL]([CustCd] [varchar](20) NOT NULL,[CustName] [varchar](100) NOT NULL,[Email] [nvarchar](100) NOT NULL,[PhoneNo] [varchar](100) NOT NULL,[InsertBy] [varchar](100) NOT NULL,[UpdateBy] [varchar](100) NOT NULL
) ON [PRIMARY]GO
select * from CustMasterTBLINSERT INTO [dbo].[CustMasterTBL]([CustCd],[CustName],[Email],[PhoneNo],[InsertBy],[UpdateBy])VALUES( 'C001','ACompany','acompany@gmail.com','55555','Shanun','Shanu')INSERT INTO [dbo].[CustMasterTBL]([CustCd],[CustName],[Email],[PhoneNo],[InsertBy],[UpdateBy])VALUES( 'C002','BCompany','bcompany@gmail.com','2323123123','Afraz','Afraz')INSERT INTO [dbo].[CustMasterTBL]([CustCd],[CustName],[Email],[PhoneNo],[InsertBy],[UpdateBy])VALUES( 'C003','CCompany','ccompany@gmail.com','786786','Afreen','Afreen')
--Stored procedureCreate PROCEDURE [dbo].[usp_CustDetails](  @CustCd                VARCHAR(52)        = '' ,@CustName                VARCHAR(52)        = '' )
AS SET NOCOUNT ON SELECT      CustCd ,CustName,Email,PhoneNo,InsertBy,UpdateByFROM  CustMasterTBLWhere  CustCd like @CustCd + '%'AND CustName like @CustName + '%'

步骤1:创建ASP.NET Core Blazor服务器应用程序

安装上面列出的所有必备组件后,单击桌面上的开始>>程序>> Visual Studio 2019 >> Visual Studio 2019。单击新建>>项目

选择您的项目文件夹并输入您的项目名称,然后单击创建按钮。

选择Blazor服务器应用程序:

创建ASP.NET Core Blazor服务器应用程序后,请等待几秒钟。您将在解决方案资源管理器中看到以下结构:

Data文件夹中,我们可以添加所有的Model,DBContext Class,Services和Controller,我们将在本文中看到。

Pages文件夹中,我们可以添加我们的所有组件files.component文件都应该有.razor扩展名的文件名。

Shared文件夹中,我们可以添加所有左边的菜单格式NavMenu.razor文件并更改主要内容从MainLayout.razor文件。

_Imports.razor文件中,我们可以看到已经添加了所有导入集,以便在所有组件页面中使用。

App.razor文件中,我们将添加要在浏览器中运行时默认显示的主要组件.Appsertings.json可用于添加连接字符串。

Startup.cs文件是一个重要文件,我们在其中添加所有端点示例(如控制器端点,HTTP客户端),添加服务并在启动Configuration方法中使用dbcontext。

运行测试应用程序

运行应用程序时,我们可以看到左侧具有导航功能,右侧包含数据。我们可以看到默认示例页面和菜单将显示在Blazor网站上。我们可以使用页面或将其删除,然后从我们自己的页面开始。

步骤2:安装软件包

为了使用Entity Framework Core和Raw SQL,请安装以下软件包:

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.SqlServer

右键单击解决方案,然后单击“管理Nuget包”。搜索所有软件包并安装所有需要的软件包,如下图所示:

安装软件包后,我们可以从“依赖软件包”中进行确认。

连接字符串

打开appsettings.json文件和SQL连接字符串。注意添加您的SQL Server ID详细信息。

{"ConnectionStrings": {"DefaultConnection": "Server= YourServer ID;Database=CustDB;user id= SQL UID;password=Sql Password;Trusted_Connection=True;MultipleActiveResultSets=true"
}

步骤3:建立模型类

接下来,我们需要创建用于在我们的应用程序中用于绑定客户详细信息的Model类。

右键单击“Data文件夹”,然后将新的类文件创建为“CustMasterTBL.cs ”:

在该类中,我们添加与以下代码相同的属性字段名称:

public class CustMasterTBL{public string CustCd { get; set; }public string CustName { get; set; }public string Email { get; set; }public string PhoneNo { get; set; }public string InsertBy { get; set; }public string UpdateBy { get; set; }}

创建DBContext CLASS

接下来,我们在服务中创建要用于连接SQL服务器的DBContext类,并使用连接字符串检索数据。我们将DBContext类创建为CustManagementContext.cs

我们在DBContext类中添加以下代码:

public partial class CustManagementContext : DbContext{public CustManagementContext(DbContextOptions<CustManagementContext> options): base(options){}public DbSet<ShanuBlazorRawSQL.Data.CustMasterTBL> CustMasterTBL { get; set; }}

创建服务类

接下来,我们创建CustMasterTBLService.cs类,以便通过使用Raw SQL查询执行存储过程来绑定结果。

首先,我们需要导入:

using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;

接下来,我们为我们创建DbContext对象以执行存储过程。

private readonly CustManagementContext _context;public CustMasterTBLService(CustManagementContext context){_context = context;}

接下来,我们创建一种以数组形式返回客户详细信息的async方法,还可以看到在该方法中我们使用FromSqlRaw来通过CustCD和CustName作为参数执行存储过程。

public async Task<CustMasterTBL[]> GetCustomerAsync(String CustCD, String CustName){CustMasterTBL[] custsObjs;var CustCDs = CustCD;var CustNames = CustName;SqlParameter param1 = new SqlParameter("@CustCd", CustCD);SqlParameter param2 = new SqlParameter("@CustName", CustName);custsObjs = _context.CustMasterTBL.FromSqlRaw("EXECUTE dbo.usp_CustDetails @CustCd,@CustName", param1, param2).ToArray();return custsObjs;}

步骤4:将服务和DbContext添加到Startup.cs

我们需要将我们创建的服务添加到Startup.cs ConfigureServices方法中。

services.AddSingleton<ItemMasterService>();

步骤5:使用客户项目

首先,我们需要添加“Razor组件”页面。

添加Razor组件

要添加“Razor组件”页面,请在Client项目中右键单击“Pages”文件夹。单击添加>>新建项目>>选择Razor组件>>输入您的组件名称,此处我们的名称为Customer.razor。

请注意,所有组件文件都必须具有扩展名.razor

在Razor Component Page中,我们有三部分代码,首先是Import部分,在其中我们导入要在组件中使用的所有引用和模型,HTML设计和数据绑定部分,最后是函数部分,以调用所有Web API绑定到我们的HTML页面中,并执行要在Component页面中显示的客户端业务逻辑。

Import部分

首先,我们在Razor View页面中导入所有必需的支持文件和引用。在这里,我们首先导入了Model和service类,以便在我们的视图中使用。

@page "/Customer"
@using ShanuBlazorRawSQL.Data
@inject CustMasterTBLService CustomerService

HTML设计和数据绑定部分

在设计部分中,我们将结果绑定到表中,还使用按钮设计搜索部分。

@if (custDetails == null)
{<p><em>Loading...</em></p>
}
else
{<table class="table"><thead><tr><th>Customer Code</th><th>Customer Name</th><th>Email</th><th>Phone No</th></tr></thead><tbody>@foreach (var forecast in custDetails){<tr><td>@forecast.CustCd</td><td>@forecast.CustName</td><td>@forecast.Email</td><td>@forecast.PhoneNo</td></tr>}</tbody></table>
}

函数部分

函数部分获取服务结果并将结果绑定到数组中,并且我们创建了函数来在单击按钮时搜索并绑定结果。

在这里,首先我们声明要绑定结果的客户Array,并声明要搜索的变量。

在OnInitializedAsync中,我们得到CustomerService结果并将结果绑定到ItemsArrays中。

@code {CustMasterTBL[] custDetails;String CustCD = "";String Custname = "";protected override async Task OnInitializedAsync(){custDetails = await CustomerService.GetCustomerAsync(CustCD,Custname);}//SearchCustomerasync Task searchDetails(){custDetails = await CustomerService.GetCustomerAsync(CustCD,Custname);}
}

导航菜单

现在,我们需要将此新添加的“DrawingSample Razor”页面添加到左侧导航中。要添加此内容,请打开“Shared文件夹”,然后打开NavMenu.cshtml页面并添加菜单。

<li class="nav-item px-3"><NavLink class="nav-link" href="Customer"><span class="oi oi-list-rich" aria-hidden="true"></span> Customer</NavLink></li>

生成并运行应用程序

兴趣点

在本文中,我们已经了解了如何使用Entity FrameWork Core Raw SQL查询在ASP.NET Core Blazor应用程序中使用存储过程。在下一篇文章中,我们将看到如何通过存储过程和实体框架核心SQL原始查询来使用CRUD功能。

用于存储过程的ASP.NET Core Blazor和EF Core原始SQL查询相关推荐

  1. 查缺补漏系统学习 EF Core 6 - 原始 SQL 查询

    推荐关注「码侠江湖」加星标,时刻不忘江湖事 这是 EF Core 系列的第五篇文章,上一篇文章盘点了 EF Core 中的几种数据查询方式. 但是有有时候,我们可能无法用标准的 LINQ 方法完成查询 ...

  2. 用ASP.NET Core MVC 和 EF Core 构建Web应用 (一)

    系统必备 .NET Core 2.0.0 SDK 或更高版本. 已安装 ASP.NET 和 Web 开发工作负载的 Visual Studio 2017 15.3 版或更高版本. 创建Web应用程序 ...

  3. ASP.NET Core MVC 和 EF Core 教程 - 创建、读取、更新和删除

    作者:Tom Dykstra 和 Rick Anderson Contoso 大学示例 web 应用程序演示如何使用 Entity Framework Core 和 Visual Studio 创建 ...

  4. mysql多租户schema复制,Asp.net core下利用EF core实现从数据实现多租户(3): 按Schema分离 附加:EF Migration 操作...

    前言 前段时间写了EF core实现多租户的文章,实现了根据数据库,数据表进行多租户数据隔离. 今天开始写按照Schema分离的文章. 其实还有一种,是通过在数据表内添加一个字段做多租户的,但是这种模 ...

  5. Asp.net core 学习笔记 ( ef core )

    更新: 2019-06-12 不小心踩坑 var adidas = new Supplier { name = "adidas" }; Db.Suppliers.Add(adida ...

  6. ef core mysql 字符集,EF Core 基础知识

    数据库连接字符串 在 ASP.NET Core 添加配置片段: { "ConnectionStrings": { "BloggingDatabase": &qu ...

  7. .NET Core 之 七 EF Core(二)

    杨中科老师视频 .NET 5教程,.Net Core 2021视频教程,杨中科主讲_哔哩哔哩_bilibili 一.主键不是小事,数据库设计.优化 EF Core 支持多种主键生成策略:自动增长,Gu ...

  8. .NET Core 之 七 EF Core(四)

    一.有了IEnumerable 还要IQueryable干什么 普通集合的版本(IEnumerable)是在内存中过滤(客户端评估),而IQueryable版本则是把查询操作翻译成SQL语句后给数据库 ...

  9. EF Core 迁移过程遇到EF Core tools version版本不相符的解决方案

    如果你使用命令: PM> add-migration Inital 提示如下信息时: The EF Core tools version '2.1.1-rtm-30846' is older t ...

最新文章

  1. 例题:学习数据库查询。学生信息表的创建,主外键关系,以及45道题的查询实例。主要知识点在讲页45页,和讲页65页...
  2. Nginx HTTP之请求行解析函数ngx_http_parse_request_line
  3. 消除软硬件鸿沟,芯客网完美支持智能硬件在移动互联时代的爆发
  4. TensorFlow自带例子
  5. 蓝色巨人IBM全力奔赴的混合云之旅能顺利吗?
  6. 一个专家眼中的Go与Java垃圾回收算法大对比
  7. Canny提取图像边缘后使用闭运算连接断线
  8. (十四)Struts2 验证框架
  9. bp神经网络matlab代码_4层bp神经网络详细推导以及代码(矩阵化运算)
  10. Oracle日期函数TRUNC
  11. 1.2、logistic回归之极大似然法
  12. 简单区分一级域名、二级域名、三级域名
  13. 快速:通过画图了解Racket
  14. 三人行,必有我师焉。择其善者而从之,其不善者而改之。
  15. 【专项研究】支付宝会员积分体系
  16. Espresso环境搭建及其基本使用
  17. 【C】有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中
  18. 用ddddocr识别图形字符验证码
  19. 2018-12 文献阅读:A Survey on Transfer Learning(2009)
  20. 715 工作制要来了!这家大公司老板:996 算个毛啊,我们715...

热门文章

  1. tp5 分页php不能foreach,tp5框架无刷新分页实现方法分析
  2. centerpython_centeros下安装python3
  3. 高清动漫壁纸,满足动漫视觉控的你
  4. 复古风格海报设计欣赏|蒸汽波了解下
  5. UI设计师如何正确打开暗黑模式|实用素材拿走
  6. c语言作业答案第四章,C语言程序的设计课件源程序及习题的答案第4章.ppt
  7. mysql 临时列_在MySQL中添加一个带有值的临时列?
  8. mac下编译curl库(处理https的问题)
  9. Python lambda函数demo
  10. CUDA的线程层次结构