C# 使用EF Core db first 注意事项

书接上回,我尝试了用db first 映射成C#实体类发现了很多问题

1.表名称不一致

2.字段名称不一致

3.没有数据注解

4.暴露连接字符串

通过查阅资料发现 还有这些命令

--use-database-names 使用数据库中的原始表名和列名(不转驼峰)
--no-pluralize 禁用复数化服务(关键!防止 BDS → BD)
--data-annotations 生成 [Column]、[StringLength] 等注解
--no-onconfiguring 不生成 OnConfiguring 方法(便于自己管理连接字符串)

以下是完整的迁移命令

dotnet ef dbcontext scaffold "Server=YourConnectStrings" Microsoft.EntityFrameworkCore.SqlServer -o Models(自己命名) --context AppDbContext(自己命名) --table D_METER_ALARM --use-database-names --no-pluralize --data-annotations --no-onconfiguring --force

在Programs.cs 添加

获取连接字符串
var connStr = builder.Configuration.GetConnectionString("SqlserverConnection");

注册 DbContext 到依赖注入容器
builder.Services.AddDbContext(option=> options.UseSqlServer(connStr));

再控制器注入你的dbcontext类(我的是_testcontext)

 [HttpPost("InsertTest")]
 public  IActionResult InsertTest([FromBody] List<D_METER_BDS> inputs)
 {
     try
     {
         foreach (var input in inputs)
         {
             input.ORDERID ??= Guid.NewGuid().ToString("N").Substring(0, 32);
             input.ASSET_NO ??= "DEFAULT_ASSET";
             input.CHECK_DATE = input.CHECK_DATE == default ? DateTime.Now : input.CHECK_DATE;
             input.BDS_PKIND = input.BDS_PKIND == default ? 0 : input.BDS_PKIND;
         }
         _testcontext.D_METER_BDS.AddRange(inputs); 
         _testcontext.SaveChanges(); 

         return Ok(new { Message = $"成功插入 {inputs.Count} 条记录", Data = inputs });
     }
     catch (Exception ex)
     {
         return StatusCode(500, $"插入失败: {ex.Message}");
     }    
 }

以上便是插入到数据库的完整方法,如果问题或者见解希望指出来!

posted @ 2025-12-18 15:08  Grapefruits  阅读(0)  评论(0)    收藏  举报