您当前的位置: 首页 >  .net

寒冰屋

暂无认证

  • 0浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

寒冰屋 发布时间:2020-12-01 19:42:45 ,浏览量:0

目录

介绍

背景

先决条件

使用代码

创建数据库和表

步骤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 CustMasterTBL

INSERT 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 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。单击新建>>项目。

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

选择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 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来通过CustCD和CustName作为参数执行存储过程。

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。

在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)
{
    

Loading...

} else { Customer Code Customer Name Email Phone No @foreach (var forecast in custDetails) { @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页面并添加菜单。

  • Customer
  • 生成并运行应用程序

    兴趣点

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

    关注
    打赏
    1665926880
    查看更多评论
    立即登录/注册

    微信扫码登录

    0.0456s