SqlHelper 使用EF-Core框架

news2024/9/24 9:21:57
 public async Task AddAsync<T>(T entity) where T : class
        {
            await _context.Set<T>().AddAsync(entity);
            await _context.SaveChangesAsync();
        }

//增加实体

public 表面方法是公开的,所有其他类都可以调用

async 表方法内可能包含异步操作,允许方法在内部使用"await"

await 在异步操作中使用,会暂停当前方法的执行(阻塞当前线程),直到方法执行完成后,才会继续执行下面的代码,暂停期间,控制权会返回给调用方(如UI线程)

Task 当一个 方法的返回类型是Task时,表面这个方法是异步的,但它不返回任何值(即它是'void'的异步版本,同理int的异步版本为Task<int>)。通过Task,调用者可以选择是否等待这个方法完成

AddAsync<T>(T entity)  T是泛型类型的参数,它使得这个方法可以处理任意类型的实体对象。T由调用者传入的entity类型所决定。如果不使用泛型,只处理某一实体类型如User,也可以写成AddUserAsync(User entity)

where T : class  约束条件,限制了T必须是一个类

定义数据库

数据库名称:T_dicomPatientMsg

注意5大约束条件:

1.主键约束:primary key  IDKEY设置为主键,主键设置自增长

2.唯一性约束:unique

3.默认约束:default    所有值都要设置默认值,除了主键

4.检查约束:check

5.外键约束:foreign key

定义实体
 public class DicomPatientMsg
 {
     [Key]
     public int IDKEY { get; set; }        //设为主键,注意实体名称需要与数据库实体名称一致
     public string PatientID { get; set; }
     public string PatientName { get; set; }
     public DateTime PatientBirthDate { get; set; }
     public DateTime CheckDate { get; set; }
     public string PicturePath { get; set; }
     public string DicomFilePath { get; set; }
     public string SOPInstanceUID { get; set; }
     public string StudyID { get; set; }
     public string StudyInstanceUID { get; set; }
     public string SeriesInstanceUID { get; set; }
     public string InstanceNum { get; set; }
     public bool IsDelete { get; set; } 
 }
SQL帮助类

单例模式实现

 public class SqlHelper
 {
     private static readonly Lazy<SqlHelper> instance = new Lazy<SqlHelper>(()=>new SqlHelper());
     private readonly AppDbContext context;

     // 私有构造函数,防止外部实例化
     private SqlHelper()
     {
         var optionsBuilder = new DbContextOptionsBuilder<AppDbContext>();

         var connectionString = "Server=.\\SQLEXPRESS;Database=Colposcope;User Id=sa;Password=123;TrustServerCertificate=True;";

         optionsBuilder.UseSqlServer(connectionString);

         context = new AppDbContext(optionsBuilder.Options);
     }

     //静态属性,返回单例
     public static SqlHelper Instance => instance.Value;

     // 增加实体
     public async Task AddAsync<T>(T entity) where T : class
     {
         await context.Set<T>().AddAsync(entity);
         await context.SaveChangesAsync();
     }

     // 获取所有实体
     public async Task<List<T>> GetAllAsync<T>() where T : class
     {
         return await context.Set<T>().ToListAsync();
     }

     // 根据ID获取实体
     public async Task<T> GetByIdAsync<T>(int id) where T : class
     {
         return await context.Set<T>().FindAsync(id);
     }

     // 更新实体
     public async Task UpdateAsync<T>(T entity) where T : class
     {
         context.Set<T>().Update(entity);
         await context.SaveChangesAsync();
     }

     // 删除实体
     public async Task DeleteAsync<T>(T entity, bool isDelete = false) where T : class
     {
         if (isDelete)
         {
             context.Set<T>().Remove(entity);
         }
         else
         {
             var property = entity.GetType().GetProperty("IsDeleted");
             if (property != null && property.PropertyType == typeof(bool))
             {
                 property.SetValue(entity, true);
                 context.Set<T>().Update(entity);
             }
             else
             {
                 throw new InvalidOperationException("Error");
             }
         }
         await context.SaveChangesAsync();
     }
 }
使用数据库
private readonly static SqlHelper sqlHelper = SqlHelper.Instance;



DicomPatientMsg msg = new DicomPatientMsg()
{
    DicomFilePath = patientMsg.DicomFilePath,
    PatientID = patientMsg.PatientID,
    PatientName = patientMsg.PatientName,
    CheckDate = checkDate,
    PicturePath = patientMsg.PicturePath,
    SOPInstanceUID = dataset.GetString(DicomTag.SOPInstanceUID),
    StudyID = dataset.GetString(DicomTag.StudyID),
    StudyInstanceUID = dataset.GetString(DicomTag.StudyInstanceUID),
    SeriesInstanceUID = dataset.GetString(DicomTag.SeriesInstanceUID),
    InstanceNum = dataset.GetString(DicomTag.InstanceNumber),
};

//存储到sql
await sqlHelper.AddAsync(msg);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2078190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快手如何去水印教程,推荐五款免费高效去水印工具

随着互联网的快速发展&#xff0c;视频内容创作和分享变得越来越普及。很多视频创作者在分享自己的作品时&#xff0c;都希望能够去除视频中的水印&#xff0c;以保护自己的版权或提高视频的观感。本文将为您介绍五款高效的视频去水印工具&#xff0c;帮助您轻松去除视频中的水…

特斯拉CEO马斯克呼吁加州加强AI监管,市场关注国际贸易动态

特斯拉与AI监管&#xff1a;马斯克的倡议 特斯拉&#xff08;TSLA&#xff09;首席执行官埃隆马斯克&#xff08;Elon Musk&#xff09;周一在社交媒体上再次表达了他对人工智能&#xff08;AI&#xff09;监管的坚定立场。他呼吁加州通过SB 1047法案&#xff0c;要求科技公司和…

前端自我提升秘籍:用这个工具快速成为全栈开发者!

最近&#xff0c;有不少前端开发者都在讨论如何进一步提升自己的技能&#xff0c;尤其是那些一直在公司里负责后台管理系统的同学。毕竟&#xff0c;后台管理系统虽然重要&#xff0c;但往往功能固定、需求清晰&#xff0c;相对来说技术挑战有限。要想突破自己的技术瓶颈&#…

黑神话悟空配置要求_2024年黑神话悟空游戏电脑配置推荐

《黑神话&#xff1a;悟空》作为一款采用虚幻引擎打造的高品质游戏&#xff0c;对硬件配置有着一定的要求。包括操作系统、处理器、内存、显卡等多方面需求。有些同学一直问&#xff0c;黑神话悟空配置要求是什么&#xff1f;下面小编就针对这个问题给大家介绍黑神话悟空官方配…

查找算法刷题【二分查找算法】

一、原理 如下图所示的就是二分查找算法的原理&#xff1a; 注意&#xff1a;二分查找算法中一个重要的思想&#xff1a;数组和函数是一样的概念&#xff0c;对可以使用二分法查找要求如下所示。 &#xff08;1&#xff09;数组f[i]是有序数组 &#xff08;2&#xff…

mapstruct和lombok同时使用时,转换实体类时数据丢失

全局搜一下maps&#xff0c;找到你进行转换的方法 可以看到新建了TswCaseInfoPlus后直接返回了&#xff0c;说明TswCaseInfoPlus没有set方法&#xff0c;或者说编译后lombok没生效 在pom文件中&#xff0c;编译打包插件中将lombok&#xff0c;mapstruct&#xff0c;lombok-map…

武汉流星汇聚:未来已来,亚马逊多元化战略引领电商行业新纪元

在全球电商的浩瀚星空中&#xff0c;亚马逊无疑是最耀眼的明星之一。凭借其强大的品牌影响力、完善的运营体系以及不断创新的技术应用&#xff0c;亚马逊不仅在美国市场稳坐头把交椅&#xff0c;更在全球范围内不断拓展其业务版图。展望未来&#xff0c;亚马逊的未来发展前景依…

新生开学,需要带的东西有哪些!

每年开学季&#xff0c;先给学子们来个灵魂拷问&#xff1a;你们是否已经做好了迎接新挑战的准备&#xff0c;还是在迷茫中踏入新的征程&#xff1f; 不管怎样&#xff0c;我们先来解决下当下寄件问题。上大学要带啥&#xff1f;行李怎么寄便宜&#xff1f; 寄快递注意事项 …

[论文笔记] LLM-ICL论文:AI模型对prompt格式分隔符的敏感性——结构化Prompt格式

又见惊雷&#xff0c;结构化Prompt格式小小变化竟能让LLM性能波动高达76%&#xff0c;ICLR2024

在Windows上用Visual Studio编译Tesseract

Tesseract是著名的OCR&#xff08;文字识别&#xff09;开源项目。我想自己编译它的源代码。然而总体而言&#xff0c;大型开源项目在Windows上编译多少都会有些磕磕绊绊&#xff0c;如果有幸最后成功了&#xff0c;都值得写一篇文章来纪念一下。这便是本文的由来。 编译环境&…

CRMEB 多店版供应商入驻及管理

一、功能介绍 供应商于移动端提出入驻申请&#xff0c;平台可于入驻申请中审核&#xff0c;审核通过后&#xff0c;该供应商可于平台上架商品。 二、供应商申请 供应商入驻申请 一、功能介绍 平台可以设置商品的供应商&#xff0c;用户下单后由供应商直接发货&#xff0c;自…

FT8493PA-RT隔离型SOP8快充充电器电源IC

FT8493XX&#xff0c;FT8493PA-RT是应用于隔离反激电压变换器的- -款高性能PWM控制器.芯片工作在CCM模式,工作频率随着负载降低而减小.拥有更高的效率,更快的瞬态响应以及更低的待机功耗.同时使用内部抖频技术可以更好的处理ENI. FT8493XX内部集成高压启动可以更快的起机以及更…

智能化Web3:如何利用人工智能优化区块链技术

随着数字技术的飞速发展&#xff0c;Web3和人工智能&#xff08;AI&#xff09;逐渐成为技术创新的两个重要领域。Web3代表了去中心化互联网的未来&#xff0c;而AI则是驱动智能化应用的核心技术。当AI与Web3相结合时&#xff0c;将会对区块链技术的优化产生深远的影响。本文将…

Elastic Stack--介绍及架构部署:ElasticSearch、Kibana、Filebeat的RPM包部署安装及基础使用

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 学习B站博主教程笔记&#xff1a; 最新版适合自学的ElasticStack全套视频&#xff08;Elk零基础入门到精通教程&#xff09;Linux运维必备—Elastic…

HTML学习笔记——用HTML记录学习过程5-全局属性

全局属性可以用来配置元素的共有行为 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>5-全局属性</title> </head> <body><div>id属性用于指定html元素的唯一id</div>…

Linux常用应急排查命令(持续更新)20240827更

1、history &#xff08;1&#xff09;使用history查看历史命令&#xff0c;分析攻击者使用过何命令 history&#xff08;2&#xff09;但攻击者也能回使用history -c 清除掉历史命令 history -c&#xff08;3&#xff09;使用cat查看cat /root/.bash_history 文件也可以查看…

设计模式-结构型模式-适配器模式

1.适配器模式定义 将类的接口转化为客户期望的另一个接口&#xff0c;适配器可以让不兼容的两个类一起协同工作&#xff1b; 1.1 适配器模式的优缺点 优点 将目标类和适配者类解耦&#xff0c;通过引入一个适配器类来重用现有的适配者类&#xff0c;无需修改原有结构&#x…

有效提高媒体曝光率,智能推荐为什么是“最大的计算系统之一”?

导语&#xff1a;我认为很少有人意识到&#xff0c;推荐系统是世界上构想过的最大的计算系统之一。——Jensen Huang &#xfeff; 在信息过载的时代背景下&#xff0c;智能推荐系统已广泛应用于电子商务、社交媒体、新闻资讯、视频音乐、旅游出行等领域&#xff0c;为用户提…

央行沟通与市场影响以日本央行与黄金市场为例

日本央行加息与市场反应 在近期&#xff0c;日本央行采取了出人意料的行动&#xff0c;将短期利率从0-0.1%上调至0.25%&#xff0c;这是自3月结束长达8年负利率政策以来的第二次加息。这一举动迅速引发了全球市场的关注&#xff0c;尤其是那些依赖低利率环境进行套利交易的市场…

每天学习一个基础算法之选择排序

目录 前言&#xff1a; 一、选择排序的基本思路和实现方法 1、基本思路 2、实现方法 二、选择排序的执行过程示意图 三、选择排序的实现代码 选择排序代码主体&#xff08;以接口函数的形式&#xff09; 测试部分&#xff08;主函数调用&#xff09; 四、对选择排序复杂度的分析…