目录
介绍
背景
先决条件
使用代码
创建数据库和表
步骤1:创建ASP.NET Core Blazor服务器应用程序
运行测试应用程序
步骤2:安装软件包
连接字符串
步骤3:建立模型类
创建DBContext CLASS
创建服务类
步骤4:将服务和DbContext添加到Startup.cs
步骤5:使用客户项目
添加Razor组件
Import部分
HTML设计和数据绑定部分
函数部分
导航菜单
生成并运行应用程序
兴趣点
在本文中,我们将详细介绍如何使用Entity Framework Core Raw SQL在我们的ASP.NET Core Blazor应用程序中执行存储过程。
原始SQL查询最常用于所有关系数据库,因为它可以返回常规实体类型或无键实体类型。就像我们使用具有大量关系表和许多页面的大型数据库一样,我们需要通过从许多表中进行联接来绑定和显示表详细信息,例如,如果要显示销售报告,在这种情况下,我们需要加入多个表,例如公司主数据,工厂主数据、客户主数据、物料主数据、生产结果和销售结果。在这种情况下,最好的选择是将其设置为存储过程,有时,很难为一个存储过程中的多个联接定义实体。在这些情况下,我们可以使用此Raw SQL查询,而无需定义实体,我们可以直接执行存储过程并将结果绑定到Blazor应用程序中。
在本文中,我们将看到如何创建存储过程,以使用EF Core Raw SQL查询在Blazor应用程序中搜索和绑定客户详细信息,以执行带有搜索参数的存储过程。
我们将使用带有存储过程的原始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 + '%'
安装上面列出的所有必备组件后,单击桌面上的开始>>程序>> 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网站上。我们可以使用页面或将其删除,然后从我们自己的页面开始。
为了使用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"
}
接下来,我们需要创建用于在我们的应用程序中用于绑定客户详细信息的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; }
}
接下来,我们在服务中创建要用于连接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;
}
我们需要将我们创建的服务添加到Startup.cs的 ConfigureServices方法中。
services.AddSingleton();
首先,我们需要添加“Razor组件”页面。
要添加“Razor组件”页面,请在Client项目中右键单击“Pages”文件夹。单击添加>>新建项目>>选择Razor组件>>输入您的组件名称,此处我们的名称为Customer.razor。
请注意,所有组件文件都必须具有扩展名.razor。
在Razor Component Page中,我们有三部分代码,首先是Import部分,在其中我们导入要在组件中使用的所有引用和模型,HTML设计和数据绑定部分,最后是函数部分,以调用所有Web API绑定到我们的HTML页面中,并执行要在Component页面中显示的客户端业务逻辑。
首先,我们在Razor View页面中导入所有必需的支持文件和引用。在这里,我们首先导入了Model和service类,以便在我们的视图中使用。
@page "/Customer"
@using ShanuBlazorRawSQL.Data
@inject CustMasterTBLService CustomerService
在设计部分中,我们将结果绑定到表中,还使用按钮设计搜索部分。
@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页面并添加菜单。
Customer
在本文中,我们已经了解了如何使用Entity FrameWork Core Raw SQL查询在ASP.NET Core Blazor应用程序中使用存储过程。在下一篇文章中,我们将看到如何通过存储过程和实体框架核心SQL原始查询来使用CRUD功能。