> 技术文档 > SmartSoftHelp DeepCore XSuite Pro Global Eco 生成C# NetCore 高并发大数据异步架构代码,一键完成99%工作量,代码经过沉淀优化:规范,专业,国际化

SmartSoftHelp DeepCore XSuite Pro Global Eco 生成C# NetCore 高并发大数据异步架构代码,一键完成99%工作量,代码经过沉淀优化:规范,专业,国际化

SmartSoftHelp DeepCore XSuite Pro Global Eco 致力于打造世界一流的.NET C# 辅助开发工具。
 以「最专业、最智能、最简单、最实用」为核心目标,极简,极速,极致的巅峰之作! 面向世界专业生态版!

1.GitHub      (托管)           
https://github.com/512929249/SmartSoftHelpProGlobalEco.githttps://github.com/512929249/SmartSoftHelpProGlobalEco.git
2.Gitee         (码云)           
https://gitee.com/sky512929249/SmartSoftHelpProGlobalEco.githttps://gitee.com/sky512929249/SmartSoftHelpProGlobalEco.git
3.Download (下载地址):
https://github.com/512929249/SmartSoftHelpProGlobalEco/archive/refs/heads/master.ziphttps://github.com/512929249/SmartSoftHelpProGlobalEco/archive/refs/heads/master.zip

以下是在 .NET Core 平台下使用 EF Core 实现 Database First(数据库优先) 和 原生 SQL 模式 并支持 异步操作 的详细步骤,包含项目创建、配置及数据操作示例:

一、前期准备

  1. 环境要求:
    • .NET Core SDK 6.0+(推荐 .NET 7/8)
    • Visual Studio 2022 或 Rider
    • 目标数据库(以 SQL Server 为例,其他数据库步骤类似)
  2. 提前创建好数据库及表结构(用于 Database First)。

二、Database First 模式(异步操作)

基于现有数据库生成实体类,通过 EF Core 异步 API 操作数据。

步骤 1:创建项目

  • 打开 Visual Studio → 创建新项目 → 选择 ASP.NET Core Web 应用程序(或控制台 / 类库,根据需求)
  • 命名项目(如 EFDbFirstAsyncDemo),选择 .NET 6.0+ → 点击 “创建”

步骤 2:安装依赖包

右键项目 → “管理 NuGet 程序包”,安装以下包:

  • Microsoft.EntityFrameworkCore(EF Core 核心)
  • Microsoft.EntityFrameworkCore.SqlServer(SQL Server 提供程序)
  • Microsoft.EntityFrameworkCore.Tools(EF 工具,用于生成实体)

步骤 3:生成实体类(Database First)

  1. 配置连接字符串:在 appsettings.json 中添加:

    json

    { \"ConnectionStrings\": { \"DefaultConnection\": \"Server=localhost;Database=YourDB;User Id=sa;Password=YourPwd;TrustServerCertificate=True\" }}
  2. 生成实体和 DbContext

    • 打开 “包管理器控制台”(PMC):

      powershell

      Scaffold-DbContext \"Name=ConnectionStrings:DefaultConnection\" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Context AppDbContext -DataAnnotations -Force
    • 生成后,Models 目录会出现实体类(如 User.cs)和 AppDbContext.cs

步骤 4:注册 DbContext 服务

在 Program.cs 中注册数据库上下文,支持依赖注入:

csharp

var builder = WebApplication.CreateBuilder(args);// 注册 DbContext(异步操作依赖此配置)builder.Services.AddDbContext(options => options.UseSqlServer(builder.Configuration.GetConnectionString(\"DefaultConnection\")));// 添加控制器/API 支持(Web 项目)builder.Services.AddControllers();var app = builder.Build();// 中间件配置...app.MapControllers();app.Run();

步骤 5:异步操作数据示例

创建服务类,使用 EF Core 异步方法(*Async 结尾)操作数据:

csharp

using Microsoft.EntityFrameworkCore;using EFDbFirstAsyncDemo.Models;public class UserService{ private readonly AppDbContext _dbContext; // 构造函数注入 DbContext public UserService(AppDbContext dbContext) { _dbContext = dbContext; } // 1. 异步查询所有数据 public async Task<List> GetAllUsersAsync() { // 异步查询:ToListAsync() return await _dbContext.Users.ToListAsync(); } // 2. 异步查询单条数据 public async Task GetUserByIdAsync(int id) { // 异步查询:FindAsync() 或 FirstOrDefaultAsync() return await _dbContext.Users.FindAsync(id); } // 3. 异步添加数据 public async Task AddUserAsync(User user) { _dbContext.Users.Add(user); // 异步保存:SaveChangesAsync() await _dbContext.SaveChangesAsync(); } // 4. 异步更新数据 public async Task UpdateUserAsync(User user) { _dbContext.Users.Update(user); await _dbContext.SaveChangesAsync(); } // 5. 异步删除数据 public async Task DeleteUserAsync(int id) { var user = await _dbContext.Users.FindAsync(id); if (user != null) { _dbContext.Users.Remove(user); await _dbContext.SaveChangesAsync(); } }}

步骤 6:在控制器中使用(Web 项目)

csharp

[ApiController][Route(\"api/[controller]\")]public class UsersController : ControllerBase{ private readonly UserService _userService; public UsersController(UserService userService) { _userService = userService; } [HttpGet] public async Task GetAll() { var users = await _userService.GetAllUsersAsync(); return Ok(users); } [HttpGet(\"{id}\")] public async Task GetById(int id) { var user = await _userService.GetUserByIdAsync(id); return user == null ? NotFound() : Ok(user); } [HttpPost] public async Task Add(User user) { await _userService.AddUserAsync(user); return CreatedAtAction(nameof(GetById), new { id = user.Id }, user); }}

三、原生 SQL 模式(异步操作)

当 EF Core LINQ 无法满足复杂查询需求时,可使用原生 SQL 语句,同样支持异步操作。

步骤 1:前期准备(同 Database First 步骤 1-2)

  • 已创建项目并安装 EF Core 相关包。
  • 若需操作现有数据库,可直接使用连接字符串(无需生成实体,或仅生成部分实体)。

步骤 2:注册 DbContext(同 Database First 步骤 4)

确保 Program.cs 中已注册 AppDbContext(即使不生成全部实体,也需 DbContext 执行 SQL)。

步骤 3:原生 SQL 异步操作示例

使用 EF Core 提供的 FromSqlRawAsync(查询)和 ExecuteSqlRawAsync(增删改)方法:

csharp

public class SqlService{ private readonly AppDbContext _dbContext; public SqlService(AppDbContext dbContext) { _dbContext = dbContext; } // 1. 异步执行原生查询(返回实体列表) public async Task<List> GetUsersByAgeAsync(int minAge) { // 参数化查询,防止 SQL 注入 var sql = \"SELECT * FROM Users WHERE Age >= @MinAge\"; return await _dbContext.Users .FromSqlRaw(sql, new SqlParameter(\"@MinAge\", minAge)) .ToListAsync(); } // 2. 异步执行原生查询(返回单个值) public async Task GetUserCountAsync() { var sql = \"SELECT COUNT(*) FROM Users\"; return await _dbContext.Database .SqlQuery(sql) // .NET 7+ 支持,旧版本用 FromSqlRaw .FirstOrDefaultAsync(); } // 3. 异步执行增删改(返回受影响行数) public async Task UpdateUserNameAsync(int id, string newName) { var sql = \"UPDATE Users SET Name = @NewName WHERE Id = @Id\"; return await _dbContext.Database .ExecuteSqlRawAsync(sql,  new SqlParameter(\"@NewName\", newName),  new SqlParameter(\"@Id\", id)); } // 4. 异步执行存储过程 public async Task<List> GetUsersByRoleAsync(string role) { // 调用存储过程:GetUsersByRole @Role return await _dbContext.Users .FromSqlRaw(\"EXEC GetUsersByRole @Role\", new SqlParameter(\"@Role\", role)) .ToListAsync(); }}

步骤 4:使用原生 SQL 服务

在控制器中注入 SqlService 并调用:

csharp

[HttpGet(\"by-age/{minAge}\")]public async Task GetByAge(int minAge){ var users = await _sqlService.GetUsersByAgeAsync(minAge); return Ok(users);}

四、关键异步方法总结

操作类型 EF Core 方法(LINQ) 原生 SQL 方法 查询列表 ToListAsync() FromSqlRawAsync() + ToListAsync() 查询单条 FirstOrDefaultAsync() FromSqlRawAsync() + FirstOrDefaultAsync() 主键查询 FindAsync() - 保存变更 SaveChangesAsync() - 执行增删改 SQL - ExecuteSqlRawAsync() 执行查询 SQL - SqlQueryAsync()(.NET 7+)

五、注意事项

  1. 异步操作规范

    • 所有异步方法需添加 async 关键字,返回 Task 或 Task
    • 调用异步方法时必须使用 await,避免同步阻塞。
    • 避免在异步方法中使用 Result 或 Wait(),防止死锁。
  2. 原生 SQL 安全

    • 必须使用参数化查询(SqlParameter),禁止字符串拼接,防止 SQL 注入。
    • 复杂 SQL 建议封装为存储过程,提高可维护性。
  3. Database First 维护

    • 数据库结构变更后,需重新执行 Scaffold-DbContext 命令(加 -Force 参数)更新实体。
    • 扩展实体功能需用 部分类,避免直接修改自动生成的代码。
  4. 性能优化

    • 异步操作适合 I/O 密集型场景(如数据库访问),能提高并发性能。
    • 大数量查询建议分页(Skip() + Take()),并使用 AsNoTracking() 关闭跟踪。

通过以上步骤,可在 .NET Core 中灵活使用 EF Core 的 Database First 模式或原生 SQL 模式,并通过异步操作提升应用的响应性和并发能力。根据项目需求选择合适的模式:Database First 适合快速基于现有数据库开发,原生 SQL 适合复杂查询场景。

下面用SmartSoftHelp DeepCore XSuite Pro Global Eco代码生成器完美生成代码的步骤:

*NetCore 原生SQL 或者 EF 异步API代码快速生成>>>>>

NetCore平台如下操作:

1.新建解决方案,上面已经很详细,这里就不在赘述。

2.新建 NetCore 异步原生SQL操作类(对应DbHelperSQLAsync)

3.新建 NetCore API接口(对应API① 原生SQL异步接口)

#region 自动生成增删改查成员方法 ///  /// 增加一条数据 ///  public static async Task Add(Model.student model) { StringBuilder strSql=new StringBuilder(); strSql.Append(\"insert into student(\"); strSql.Append(\"id,txt_name,indate)\"); strSql.Append(\" values (\"); strSql.Append(\"@id,@txt_name,@indate)\"); SqlParameter[] parameters = {  new SqlParameter(\"@id\",SqlDbType.Int,10),  new SqlParameter(\"@txt_name\",SqlDbType.NVarChar,50),  new SqlParameter(\"@indate\",SqlDbType.DateTime,23) }; parameters[0].Value = model.id; parameters[1].Value = model.txt_name; parameters[2].Value = model.indate; await int rows=DbHelperSQLAsync.ExecuteSqlAsync(strSql.ToString(),parameters); if (rows > 0)  {return true;}  else {return false;}  } ///  /// 更新一条数据 ///  public static async Task UpDate(Model.student model , string strWhere) { StringBuilder strSql=new StringBuilder(); strSql.Append(\"update student set \"); strSql.Append(\"id=@id,\"); strSql.Append(\"txt_name=@txt_name,\"); strSql.Append(\"indate=@indate\"); strSql.Append(\" where \"+strWhere); SqlParameter[] parameters = {  new SqlParameter(\"@id\",SqlDbType.Int,10),  new SqlParameter(\"@txt_name\",SqlDbType.NVarChar,50),  new SqlParameter(\"@indate\",SqlDbType.DateTime) }; parameters[0].Value = model.id; parameters[1].Value = model.txt_name; parameters[2].Value = model.indate; await int rows=DbHelperSQLAsync.ExecuteSqlAsync(strSql.ToString(),parameters); if (rows > 0)  {return true;}  else {return false;}  }/// /// 删除数据/// public static async Task Delete(string strWhere){StringBuilder strSql=new StringBuilder();strSql.Append(\"delete FROM student \");{strSql.Append(\" where \"+strWhere);}await int rows= DbHelperSQLAsync.ExecuteSqlAsync(strSql.ToString()); if (rows > 0) {return true;} else  {return false;} }/// /// 获得数据列表/// public static async Task GetList(string strWhere){StringBuilder strSql=new StringBuilder();strSql.Append(\"select id, txt_name, indate\");strSql.Append(\" FROM student \");if(strWhere.Trim()!=\"\"){strSql.Append(\" where \"+strWhere);}await DataSet dt= DbHelperSQLAsync.QueryAsync(strSql.ToString());return dt;}/// /// 解析json为实体:json转化成数据库实体/// public Model.student studentJsonToModel(){JObject jsonobj = (JObject)JsonConvert.DeserializeObject(receivepost());Model.student entity = new Model.student();JObject outobj = (JObject)JsonConvert.DeserializeObject(jsonobj[\"student\"].ToString());entity.id= outobj[\"id\"].ToString();entity.txt_name= outobj[\"txt_name\"].ToString();entity.indate= outobj[\"indate\"].ToString();return entity;}/// /// 实体转换json:一条实体model数据转化成json/// public string studentModelToJson(){Model.student model = new Model.student();model.id=\"@id\";//测试数据model.txt_name=\"@txt_name\";//测试数据model.indate=\"@indate\";//测试数据string studentjson = JsonConvert.SerializeObject(model);return studentjson.ToString();}/// /// 获取客户端ajax post提交的数据 json格式/// private string receivepost(){try{StreamReader stream = new StreamReader(HttpContext.Request.Body, System.Text.Encoding.UTF8);string body = stream.ReadToEndAsync().GetAwaiter().GetResult();return body;}catch (Exception ex){return \"接收post提交的数据出错:\\n\" + ex.Message;}}/// /// 服务端返回json到客户端/// private ActionResult returndata(){var jsonData = JsonConvert.SerializeObject(studentModelToJson()); Response.ContentType=\"application/json\";//设置响应的Content-Type为JSONreturn Content(jsonData, \"application/json\");// 返回JSON数据}#endregion 成员方法

4.或者新建EF ORM 生成实体模型(操作对应Entities)

1.NuGet 程序包安装 以下程序依赖,请注意版本号必须一致 (3.1.0 可以更改升级为更高版本,但必须一致)Microsoft.EntityFrameworkCore 3.1.0Microsoft.EntityFrameworkCore.Design 3.1.0Microsoft.EntityFrameworkCore.Tools 3.1.0Microsoft.EntityFrameworkCore.SQLServer 3.1.0Microsoft.EntityFrameworkCore.SQLServerTools 3.1.02.生成实体类访问数据库模型 ORMScaffold-DbContext \"server=\"服务器ip地址\";uid=\"数据库用户名\";pwd=\"数据库密码\";database=\"数据库名称\";Trusted_Connection=false;\" Microsoft.EntityFrameworkCore.SQLServer -OutputDir Entities--(OutputDir 生成项目输出文件夹 Entities)net 9 如下操作1.NuGet 程序包安装 以下程序依赖,请注意版本号必须一致 (9.0.6 可以更改升级为更高版本,但必须一致)Microsoft.EntityFrameworkCore 9.0.6Microsoft.EntityFrameworkCore.Design 9.0.6Microsoft.EntityFrameworkCore.Tools 9.0.6Microsoft.EntityFrameworkCore.SQLServer 9.0.62.生成实体类访问数据库模型 ORM安装依赖以后,工具->NuGet包管理器->程序包管理其控制台->Scaffold-DbContext -Connection \"Server=服务器ip地址;Database=数据库名称;User Id=sa;Password=数据库密码;Encrypt=True;TrustServerCertificate=True;\" -Provider Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models/DataModels -Context DBFContext--(OutputDir 生成项目输出文件夹 Models/DataModels)

5.新建 NetCore EF 异步操作类(对应 DbHelperAsync )

6.新建 API接口(对应API② EF异步接口)

#region 自动生成增删改查成员方法////// 创建DbHelperAsync实例///  private DbHelperAsync db = new DbHelperAsync();/// /// 增加一条实体数据///  public int Addstudent() {  student Modelstudent = new student();  Modelstudent.id=@id;  Modelstudent.txt_name=@txt_name;  Modelstudent.indate=@indate;  db.student.Add(Modelstudent);  //await db.student.Add(Modelstudent); }/// /// 修改一条实体数据///  public int UpDatestudent() {  student Modelstudent = new student();  Modelstudent.id=@id;  Modelstudent.txt_name=@txt_name;  Modelstudent.indate=@indate;  db.student.Update(Modelstudent);  //await db.student.Update(Modelstudent); }/// /// 删除一条实体数据///  public int Deletestudent() {  student Modelstudent = new student();  Modelstudent.id=@id;  Modelstudent.txt_name=@txt_name;  Modelstudent.indate=@indate;  db.student.Remove(Modelstudent);  //await db.student.Remove(Modelstudent); }/// /// 单个实体查询 ///  public List Querystudent() {  return db.student.where(p => p.id == @id).ToList();  //return await db.student.where(p => p.id == @id).ToList();  //return db.student.ToList(); }/// /// SQL完整语句异步查询返回DataSet数据集///  public async Task studentQuery() {  string SQLstr=\"\";  return await DbHelperSQLAsync.QueryAsync(SQLstr); }/// /// 解析json为实体:json转化成数据库实体/// public Model.student studentjsonToModel(){JObject jsonobj = (JObject)JsonConvert.DeserializeObject(receivepost());Model.student entity = new Model.student();JObject outobj = (JObject)JsonConvert.DeserializeObject(jsonobj[\"student\"].ToString());entity.id= outobj[\"id\"].ToString();entity.txt_name= outobj[\"txt_name\"].ToString();entity.indate= outobj[\"indate\"].ToString();return entity;}/// /// 实体转换json:一条实体model数据转化成json/// public string studentmodelToJson(){Model.student model = new Model.student();model.id=\"@id\";//测试数据model.txt_name=\"@txt_name\";//测试数据model.indate=\"@indate\";//测试数据string studentjson = JsonConvert.SerializeObject(model);return studentjson.ToString();}/// /// 获取客户端ajax post提交的数据 json格式/// private string receivepost(){try{StreamReader stream = new StreamReader(HttpContext.Request.Body, System.Text.Encoding.UTF8);string body = stream.ReadToEndAsync().GetAwaiter().GetResult();return body;}catch (Exception ex){return \"接收post提交的数据出错:\\n\" + ex.Message;}}/// /// 服务端返回json到客户端/// private ActionResult returndata(){var jsonData = JsonConvert.SerializeObject(studentModelToJson()); Response.ContentType=\"application/json\";//设置响应的Content-Type为JSONreturn Content(jsonData, \"application/json\");// 返回JSON数据}#endregion 自动生成增删改查成员方法

7.新建 Web UI层,生成的UI文件添加到UI目录

student MUI

student表单页

// 初始化MUI框架mui.init({swipeBack:true //启用右滑关闭功能});try { //客户端表单验证,注意:为了安全服务端也需要验证,js禁用的情况下不安全function checkform() { if (document.getElementById(\'id\').value == \"\") {mui.toast(\"请输入编号\");document.getElementById(\'id\').focus();return false;}if (document.getElementById(\'txt_name\').value == \"\") {mui.toast(\"请输入姓名\");document.getElementById(\'txt_name\').focus();return false;}if (document.getElementById(\'indate\').value == \"\") {mui.toast(\"请输入时间\");document.getElementById(\'indate\').focus();return false;}//post提交的json数据var indata = {\"student\":{id: \'\\\'\'+document.getElementById(\'id\').value + \'\\\'\',txt_name: \'\\\'\'+document.getElementById(\'txt_name\').value + \'\\\'\',indate: \'\\\'\'+document.getElementById(\'indate\').value + \'\\\'\'}} //发送数据到服务器,后台交互mui.ajax(\'../ApiAjax/student?\', {contentType: \"application/json;charset=UTF-8\",data: JSON.stringify(indata),dataType: \'json\',//服务器返回json数据格式type: \'post\',//http 请求类型setTimeout: \'12000\',//超时时间设置为12妙async: true, //异步请求headers: { \'Content-Type\': \'application/json\' },success: function (data) {if (data == null || data == \'\') { mui.toast(\"接口调用故障!
返回数据为空?\"); return; }//操作成功-返回数据异常if (data == \"成功\") { location.replace(\"B.html\"); }//操作成功-跳转到下一个页面else { mui.toast(data); //api接口返回的数据try { var obj = JSON.parse(data); //返回json解析 console.log(obj);var id=obj.id;var txt_name=obj.txt_name;var indate=obj.indate;console.log(\'Json解析成功:\')console.log( \'id:\'+id+ \'txt_name:\'+txt_name+ \'indate:\'+indate);//输出详细错误到控制台 } catch (err) {mui.toast(\'接口成功返回数据!
Json解析发生异常!\');//json解析发生异常console.log(\'Json解析发生异常:\\n\' + err);//json输出详细错误到控制台 } } }, error: function (xhr, type, errorThrown) { mui.toast(\'请求url没有响应!
请求url地址错误!\');//Ajax异常处理console.log(\'Ajax调用异常:\\n\' + xhr + \" \" + type + \" \" + errorThrown);//输出详细错误到控制台 }});}} catch (err) { mui.toast(\'接口调用异常!
请求发生错误!\');//请求异常处理 console.log(\'接口调用异常,请求发生错误:\\n\' + err);//输出详细错误到控制台 } try { //取消清空表单function formclear() { document.getElementById(\'id\').value =\'\'; document.getElementById(\'txt_name\').value =\'\'; document.getElementById(\'indate\').value =\'\'; } } catch (err) { mui.toast(\'清空表单异常!
网页发生错误!\');console.log(\'清空表单异常:\\n\' + err);//输出详细错误到控制台 }

生成的代码分别对应添加(复制到对应目录下)到项目中即可

8.还支持常见SQL一键生成

生成的代码添加(复制到对应目录下)到项目中即可

这些代码全部由SmartSoftHelp DeepCore XSuite Pro Global Eco一键自动生成,从底层到UI,架构完美经典,代码经过反复优化沉淀,不仅规范,干净,整洁,而却领先...

这些代码都是大模型豆包,DeepSeek等优化以后的升级代码,不需要再使用大模型,只需要vs 插件gridmain格式化代码对齐就可....


SmartSoftHelp DeepCore XSuite Pro Global Eco 致力于打造世界一流的.NET C# 辅助开发工具。
 以「最专业、最智能、最简单、最实用」为核心目标,极简,极速,极致的巅峰之作! 面向世界专业生态版!
1.GitHub      (托管)           
https://github.com/512929249/SmartSoftHelpProGlobalEco.git
2.Gitee         (码云)           
https://gitee.com/sky512929249/SmartSoftHelpProGlobalEco.git
3.Download (下载地址):
https://github.com/512929249/SmartSoftHelpProGlobalEco/archive/refs/heads/master.zip
 



不一样的高度视觉,不一样的效率,让软件开发成为一门艺术...