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

目录

介绍

背景

先决条件

使用代码

创建数据库和表

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

运行测试应用程序

步骤2:安装软件包

连接字符串

步骤3:建立模型类

创建DBContext CLASS

创建服务类

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

步骤5:使用客户项目

添加Razor组件

Import部分

HTML设计和数据绑定部分

函数部分

导航菜单

生成并运行应用程序

兴趣点


  • 下载源405 KB

用于存储过程的ASP.NET Core Blazor和EF Core原始SQL查询_第1张图片

介绍

在本文中,我们将详细介绍如何使用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 CustMasterTBL

INSERT INTO [dbo].[CustMasterTBL]
           ([CustCd],[CustName],[Email],[PhoneNo],[InsertBy],[UpdateBy])
     VALUES
           ( 'C001','ACompany','[email protected]','55555','Shanun','Shanu')

INSERT INTO [dbo].[CustMasterTBL]
           ([CustCd],[CustName],[Email],[PhoneNo],[InsertBy],[UpdateBy])
     VALUES
           ( 'C002','BCompany','[email protected]','2323123123','Afraz','Afraz')

INSERT INTO [dbo].[CustMasterTBL]
           ([CustCd],[CustName],[Email],[PhoneNo],[InsertBy],[UpdateBy])
     VALUES
           ( 'C003','CCompany','[email protected]','786786','Afreen','Afreen')
--Stored procedure

Create PROCEDURE [dbo].[usp_CustDetails]
        (  
        @CustCd                VARCHAR(52)        = '' 
        ,@CustName                VARCHAR(52)        = '' 
        )
AS 

SET NOCOUNT ON 
 
        SELECT      CustCd 
                  ,CustName
                  ,Email
                  ,PhoneNo
                  ,InsertBy
                  ,UpdateBy
        FROM  CustMasterTBL
         Where  
                    CustCd like @CustCd + '%'
                AND CustName like @CustName + '%'

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

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

用于存储过程的ASP.NET Core Blazor和EF Core原始SQL查询_第2张图片

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

用于存储过程的ASP.NET Core Blazor和EF Core原始SQL查询_第3张图片

选择Blazor服务器应用程序:

用于存储过程的ASP.NET Core Blazor和EF Core原始SQL查询_第4张图片

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

用于存储过程的ASP.NET Core Blazor和EF Core原始SQL查询_第5张图片

Data文件夹中,我们可以添加所有的ModelDBContext ClassServicesController,我们将在本文中看到。

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

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

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

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

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

运行测试应用程序

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

用于存储过程的ASP.NET Core Blazor和EF Core原始SQL查询_第6张图片

步骤2:安装软件包

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

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.SqlServer

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

用于存储过程的ASP.NET Core Blazor和EF Core原始SQL查询_第7张图片

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

连接字符串

打开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"
}

 

用于存储过程的ASP.NET Core Blazor和EF Core原始SQL查询_第8张图片

步骤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 options)
           : base(options)
        {
        }
        public DbSet 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来通过CustCDCustName作为参数执行存储过程。

public async Task 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();

步骤5:使用客户项目

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

添加Razor组件

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

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

用于存储过程的ASP.NET Core Blazor和EF Core原始SQL查询_第9张图片

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

Import部分

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

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

HTML设计和数据绑定部分

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

@if (custDetails == null)
{
    

Loading...

} else { @foreach (var forecast in custDetails) { }
Customer Code Customer Name Email Phone No
@forecast.CustCd @forecast.CustName @forecast.Email @forecast.PhoneNo
}

函数部分

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

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

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

@code {
    CustMasterTBL[] custDetails;
      String CustCD = "";
        String Custname = "";

    protected override async Task OnInitializedAsync()
    {
        custDetails = await CustomerService.GetCustomerAsync(CustCD,Custname);
    }

    //SearchCustomer
    async Task searchDetails()
    {
        custDetails = await CustomerService.GetCustomerAsync(CustCD,Custname);
    }
}

导航菜单

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

生成并运行应用程序

用于存储过程的ASP.NET Core Blazor和EF Core原始SQL查询_第10张图片

兴趣点

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

你可能感兴趣的:(ASP.NET,CORE,架构及框架,ASP.NET,Core,Blazor,EF,Core,原始SQL查询)