C#之EntityFramework的应用

目录

1,名词概述。

2,实体数据模型EDM介绍。

3,规范函数。

4,查看Linq转换成的SQL语句。

5,数据的增删改查。

5.1,数据查询

5.2,数据插入

5.3,数据更新

5.4,数据删除

6,使用SQL语句

6.1,无结果集返回时

6.2,有结果集返回值时

6.3,调用存储过程

6.3.1,定义存储过程

         6.3.2,调用存储过程

7,EF性能优化。

7.1,状态说明

7.2,优化方法


1,名词概述。

1.1,ORM:对象映射模型。

1.2,EntityClient:实体代理,用来操作EDM(实体对象模型)。

1.3,ADO.Net Provider:翻译Sql语句,用来访问数据库。

1.4,EDM(EntityDataModel):实体数据模型。

1.5,CRUD :Create,Read,Update,Delete。

2,实体数据模型EDM介绍。

        EDM包含三部分SSDL,CSDL,MSL。实现将关系数据库模型转换为实体数据模型,并将由三部分组成结构描述放在扩展名为.edmx的XML文件中。

  • 添加实体数据模型

  • 选择使用模式(当前使用来自数据库的EF设计器模式)

注意事项:使用Code First模型将不产生edmx文件。

  • 连接数据库,添加完成后项目中自动生成edmx文件。

  • 选择edmx文件右键选择打开方式,在打开方式对话框中选择XML(文本)编辑器

  • 查看详细的存储结构,实体结构,映射关系等

SSDL:存储架构定义语言。负责与数据库中的数据表做实体对应(将数据表的结构与关系用xml描述)

<!-- SSDL content --><edmx:StorageModels><Schema Namespace="EFDBModel.Store" Provider="System.Data.SqlClient" ProviderManifestToken="2008" Alias="Self" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl"><EntityType Name="Admins"><Key><PropertyRef Name="LoginId" /></Key><Property Name="LoginId" Type="int" StoreGeneratedPattern="Identity" Nullable="false" /><Property Name="LoginPwd" Type="varchar" MaxLength="20" Nullable="false" /><Property Name="AdminName" Type="varchar" MaxLength="20" Nullable="false" /></EntityType><EntityType Name="ScoreList"><Key><PropertyRef Name="Id" /></Key><Property Name="Id" Type="int" StoreGeneratedPattern="Identity" Nullable="false" /><Property Name="StudentId" Type="int" Nullable="false" /><Property Name="CSharp" Type="int" /><Property Name="SQLServerDB" Type="int" /><Property Name="UpdateTime" Type="smalldatetime" Nullable="false" /></EntityType><EntityType Name="StudentClass"><Key><PropertyRef Name="ClassId" /></Key><Property Name="ClassId" Type="int" Nullable="false" /><Property Name="ClassName" Type="varchar" MaxLength="20" Nullable="false" /></EntityType><EntityType Name="Students"><Key><PropertyRef Name="StudentId" /></Key><Property Name="StudentId" Type="int" StoreGeneratedPattern="Identity" Nullable="false" /><Property Name="StudentName" Type="varchar" MaxLength="20" Nullable="false" /><Property Name="Gender" Type="char" MaxLength="2" Nullable="false" /><Property Name="Birthday" Type="smalldatetime" Nullable="false" /><Property Name="StudentIdNo" Type="numeric" Precision="18" Scale="0" Nullable="false" /><Property Name="Age" Type="int" Nullable="false" /><Property Name="PhoneNumber" Type="varchar" MaxLength="50" /><Property Name="StudentAddress" Type="varchar" MaxLength="500" /><Property Name="ClassId" Type="int" Nullable="false" /></EntityType><Association Name="fk_classId"><End Role="StudentClass" Type="Self.StudentClass" Multiplicity="1" /><End Role="Students" Type="Self.Students" Multiplicity="*" /><ReferentialConstraint><Principal Role="StudentClass"><PropertyRef Name="ClassId" /></Principal><Dependent Role="Students"><PropertyRef Name="ClassId" /></Dependent></ReferentialConstraint></Association><Association Name="fk_StudentId"><End Role="Students" Type="Self.Students" Multiplicity="1" /><End Role="ScoreList" Type="Self.ScoreList" Multiplicity="*" /><ReferentialConstraint><Principal Role="Students"><PropertyRef Name="StudentId" /></Principal><Dependent Role="ScoreList"><PropertyRef Name="StudentId" /></Dependent></ReferentialConstraint></Association><EntityContainer Name="EFDBModelStoreContainer"><EntitySet Name="Admins" EntityType="Self.Admins" Schema="dbo" store:Type="Tables" /><EntitySet Name="ScoreList" EntityType="Self.ScoreList" Schema="dbo" store:Type="Tables" /><EntitySet Name="StudentClass" EntityType="Self.StudentClass" Schema="dbo" store:Type="Tables" /><EntitySet Name="Students" EntityType="Self.Students" Schema="dbo" store:Type="Tables" /><AssociationSet Name="fk_classId" Association="Self.fk_classId"><End Role="StudentClass" EntitySet="StudentClass" /><End Role="Students" EntitySet="Students" /></AssociationSet><AssociationSet Name="fk_StudentId" Association="Self.fk_StudentId"><End Role="Students" EntitySet="Students" /><End Role="ScoreList" EntitySet="ScoreList" /></AssociationSet></EntityContainer></Schema></edmx:StorageModels>

CSDL: 概念架构定义语言。概念模型对应的实体类,用实体类表示数据库中的对象。

<!-- CSDL content --><edmx:ConceptualModels><Schema Namespace="EFDBModel" Alias="Self" annotation:UseStrongSpatialTypes="false" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" xmlns="http://schemas.microsoft.com/ado/2009/11/edm"><EntityType Name="Admins"><Key><PropertyRef Name="LoginId" /></Key><Property Name="LoginId" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" /><Property Name="LoginPwd" Type="String" MaxLength="20" FixedLength="false" Unicode="false" Nullable="false" /><Property Name="AdminName" Type="String" MaxLength="20" FixedLength="false" Unicode="false" Nullable="false" /></EntityType><EntityType Name="ScoreList"><Key><PropertyRef Name="Id" /></Key><Property Name="Id" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" /><Property Name="StudentId" Type="Int32" Nullable="false" /><Property Name="CSharp" Type="Int32" /><Property Name="SQLServerDB" Type="Int32" /><Property Name="UpdateTime" Type="DateTime" Nullable="false" Precision="0" /><NavigationProperty Name="Students" Relationship="Self.fk_StudentId" FromRole="ScoreList" ToRole="Students" /></EntityType><EntityType Name="StudentClass"><Key><PropertyRef Name="ClassId" /></Key><Property Name="ClassId" Type="Int32" Nullable="false" /><Property Name="ClassName" Type="String" MaxLength="20" FixedLength="false" Unicode="false" Nullable="false" /><NavigationProperty Name="Students" Relationship="Self.fk_classId" FromRole="StudentClass" ToRole="Students" /></EntityType><EntityType Name="Students"><Key><PropertyRef Name="StudentId" /></Key><Property Name="StudentId" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" /><Property Name="StudentName" Type="String" MaxLength="20" FixedLength="false" Unicode="false" Nullable="false" /><Property Name="Gender" Type="String" MaxLength="2" FixedLength="true" Unicode="false" Nullable="false" /><Property Name="Birthday" Type="DateTime" Nullable="false" Precision="0" /><Property Name="StudentIdNo" Type="Decimal" Precision="18" Scale="0" Nullable="false" /><Property Name="Age" Type="Int32" Nullable="false" /><Property Name="PhoneNumber" Type="String" MaxLength="50" FixedLength="false" Unicode="false" /><Property Name="StudentAddress" Type="String" MaxLength="500" FixedLength="false" Unicode="false" /><Property Name="ClassId" Type="Int32" Nullable="false" /><NavigationProperty Name="ScoreList" Relationship="Self.fk_StudentId" FromRole="Students" ToRole="ScoreList" /><NavigationProperty Name="StudentClass" Relationship="Self.fk_classId" FromRole="Students" ToRole="StudentClass" /></EntityType><Association Name="fk_StudentId"><End Role="Students" Type="Self.Students" Multiplicity="1" /><End Role="ScoreList" Type="Self.ScoreList" Multiplicity="*" /><ReferentialConstraint><Principal Role="Students"><PropertyRef Name="StudentId" /></Principal><Dependent Role="ScoreList"><PropertyRef Name="StudentId" /></Dependent></ReferentialConstraint></Association><Association Name="fk_classId"><End Role="StudentClass" Type="Self.StudentClass" Multiplicity="1" /><End Role="Students" Type="Self.Students" Multiplicity="*" /><ReferentialConstraint><Principal Role="StudentClass"><PropertyRef Name="ClassId" /></Principal><Dependent Role="Students"><PropertyRef Name="ClassId" /></Dependent></ReferentialConstraint></Association><EntityContainer Name="EFDBEntities" annotation:LazyLoadingEnabled="true"><EntitySet Name="Admins" EntityType="Self.Admins" /><EntitySet Name="ScoreList" EntityType="Self.ScoreList" /><EntitySet Name="StudentClass" EntityType="Self.StudentClass" /><EntitySet Name="Students" EntityType="Self.Students" /><AssociationSet Name="fk_StudentId" Association="Self.fk_StudentId"><End Role="Students" EntitySet="Students" /><End Role="ScoreList" EntitySet="ScoreList" /></AssociationSet><AssociationSet Name="fk_classId" Association="Self.fk_classId"><End Role="StudentClass" EntitySet="StudentClass" /><End Role="Students" EntitySet="Students" /></AssociationSet></EntityContainer></Schema></edmx:ConceptualModels>

MSL:  映射规范语言。 将存储模型中字段与概念模型中的属性对应。

  <!-- C-S mapping content --><edmx:Mappings><Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2009/11/mapping/cs"><EntityContainerMapping StorageEntityContainer="EFDBModelStoreContainer" CdmEntityContainer="EFDBEntities"><EntitySetMapping Name="Admins"><EntityTypeMapping TypeName="EFDBModel.Admins"><MappingFragment StoreEntitySet="Admins"><ScalarProperty Name="LoginId" ColumnName="LoginId" /><ScalarProperty Name="LoginPwd" ColumnName="LoginPwd" /><ScalarProperty Name="AdminName" ColumnName="AdminName" /></MappingFragment></EntityTypeMapping></EntitySetMapping><EntitySetMapping Name="ScoreList"><EntityTypeMapping TypeName="EFDBModel.ScoreList"><MappingFragment StoreEntitySet="ScoreList"><ScalarProperty Name="Id" ColumnName="Id" /><ScalarProperty Name="StudentId" ColumnName="StudentId" /><ScalarProperty Name="CSharp" ColumnName="CSharp" /><ScalarProperty Name="SQLServerDB" ColumnName="SQLServerDB" /><ScalarProperty Name="UpdateTime" ColumnName="UpdateTime" /></MappingFragment></EntityTypeMapping></EntitySetMapping><EntitySetMapping Name="StudentClass"><EntityTypeMapping TypeName="EFDBModel.StudentClass"><MappingFragment StoreEntitySet="StudentClass"><ScalarProperty Name="ClassId" ColumnName="ClassId" /><ScalarProperty Name="ClassName" ColumnName="ClassName" /></MappingFragment></EntityTypeMapping></EntitySetMapping><EntitySetMapping Name="Students"><EntityTypeMapping TypeName="EFDBModel.Students"><MappingFragment StoreEntitySet="Students"><ScalarProperty Name="StudentId" ColumnName="StudentId" /><ScalarProperty Name="StudentName" ColumnName="StudentName" /><ScalarProperty Name="Gender" ColumnName="Gender" /><ScalarProperty Name="Birthday" ColumnName="Birthday" /><ScalarProperty Name="StudentIdNo" ColumnName="StudentIdNo" /><ScalarProperty Name="Age" ColumnName="Age" /><ScalarProperty Name="PhoneNumber" ColumnName="PhoneNumber" /><ScalarProperty Name="StudentAddress" ColumnName="StudentAddress" /><ScalarProperty Name="ClassId" ColumnName="ClassId" /></MappingFragment></EntityTypeMapping></EntitySetMapping></EntityContainerMapping></Mapping></edmx:Mappings></edmx:Runtime>

3,规范函数。

        EDM配合Linq查询语言使用,但是因为EDM中的Linq查询语言最终由Ado.net Provider编译为SQL语句,限制了EDM只能使用部分规范的方法。

  • 可使用的规范函数。
System.String 静态方法 Concat(),Equals(),IsNullOrEmpty()等System.String 实例方法 Contains(),EndsWith(),StartsWith(),Replace()等DataTime 静态方法DataTime 实例方法Math静态方法Guid静态方法

例如:

context.Students.Where(t => t.StudentName.StartsWith("张"));
//被provider翻译为:
SELECT [Extent1].[StudentId] AS [StudentId], [Extent1].[StudentName] AS [StudentName], [Extent1].[Gender] AS [Gender], [Extent1].[Birthday] AS [Birthday], [Extent1].[StudentIdNo] AS [StudentIdNo], [Extent1].[Age] AS [Age], [Extent1].[PhoneNumber] AS [PhoneNumber], [Extent1].[StudentAddress] AS [StudentAddress], [Extent1].[ClassId] AS [ClassId]FROM [dbo].[Students] AS [Extent1]WHERE [Extent1].[StudentName] LIKE '张%'//如果是使用非规范函数的正则表达式,则抛出异常:
//其他信息: LINQ to Entities 不识别方法“Boolean IsMatch(System.String, System.String)”,因//此该方法无法转换为存储表达式。),因无法转译为SQL语句
context.Students.Where(t => System.Text.RegularExpressions.Regex.IsMatch(t.StudentName, "^张.*"));//抛出异常

4,查看Linq转换成的SQL语句。

        查询表达式.ToString()即可查看转换SQL语句。需要注意的是Linq查询是延迟查询,即使用时才进行查询。

5,数据的增删改查。

使用的数据

5.1,数据查询

MyDbContext context = new MyDbContext();
//普通查询
var result = context.Students.Where(s => s.StudentId > 100004);
Students ss=   context.Students.Find(100004);//多表联合查询
var arr=   from a in context.ScoreList where a.StudentId>=100004select new{a.StudentId,a.SQLServerDB,a.Students.StudentName,a.Students.StudentClass.ClassName};

5.2,数据插入

 MyDbContext context = new MyDbContext();
//添加方式Students s = new Students{Age = 23,Birthday = DateTime.Parse("2001/4/23"),Gender = "女",PhoneNumber = "1234567",StudentAddress = "湖北武汉",StudentIdNo = 123456789987654321,StudentName = "李欣",ClassId = context.StudentClass.FirstOrDefault(t => t.ClassName.Equals("网络1班")).ClassId};context.Students.Add(s);context.SaveChanges();//方式2
s.StudentIdNo = 123456789987654322;context.Entry(s).State = System.Data.Entity.EntityState.Added;context.SaveChanges();
//方式3Students stu = new Students{StudentId = 100010,Age = 20,Birthday = DateTime.Parse("1998/7/23"),Gender = "女",PhoneNumber = "13232224242",StudentIdNo = 111111110111111118,StudentAddress = "广东东莞",StudentName = "张三",};//注意这里无需指明classId//这里获取StudentClass对象,该对象包含了classId同时也包含了导航属性students(导航属性students中的Studentid均相同,主外键一对多的关系)
(from c in context.StudentClass where c.ClassName.Equals("计算机2班") select c).FirstOrDefault().Students.Add(stu);
context.SaveChanges();

5.3,数据更新

//方式1
Students stu = context.Students.Find(100014);
stu.StudentName = "李2新";
context.SaveChanges();
//方式2
Students stu2 = new Students
{Age = 23,Birthday = DateTime.Parse("2001/4/23"),Gender = "女",PhoneNumber = "1234567",StudentAddress = "湖北武汉",StudentIdNo = 123456789987654323,StudentName = "李欣",ClassId = context.StudentClass.FirstOrDefault(t => t.ClassName.Equals("网络1班")).ClassId,
StudentId = 100015
};context.Entry(stu2).State = System.Data.Entity.EntityState.Modified;
context.SaveChanges();

5.4,数据删除

//方法1,查询出对象再删除Students stu1 = context.Students.Find(100014);context.Students.Remove(stu1);context.SaveChanges();
//方法2,创建对象直接删除Students stu2 = new Students { StudentId = 100013 };context.Entry(stu2).State = System.Data.Entity.EntityState.Deleted;context.SaveChanges();
//方法3,创建对象附加后再删除Students stu3 = new Students { StudentId = 100011 };context.Students.Attach(stu3);context.Students.Remove(stu3);context.SaveChanges();
//方法4Students stu3 = new Students { StudentId = 100011 };context.Entry(stu3).State = System.Data.Entity.EntityState.Unchanged;context.Students.Remove(stu3);context.SaveChanges();

6,使用SQL语句

6.1,无结果集返回时

            //增加string sqlcmd = "insert into StudentClass (ClassId,ClassName) values (7,\'软件10班\')";//删除string sqlcmd2 = "delete from StudentClass where ClassId>=7";context.Database.ExecuteSqlCommand(sqlcmd);

6.2,有结果集返回值时

 var arr = context.Database.SqlQuery<StudentClass>("select * from StudentClass");foreach (var item in arr){Console.WriteLine(item.ClassId + "\t" + item.ClassName);}

6.3,调用存储过程

6.3.1,定义存储过程
--存储过程1if exists(select * from sysobjects where name='ups_procUpate')drop proc ups_procUpategocreate proc ups_procUpate@studentName nvarchar(50),@id int = 100004asupdate Students set StudentName=@studentName where StudentId=@idgo--存储过程2 if exists(select * from sysobjects where name ='ups_procRead')drop proc ups_procReadgocreate proc ups_procRead @id intasselect * from Students where StudentId>=@idgo
6.3.2,调用存储过程
 //调用存储过程context.Database.ExecuteSqlCommand("exec  ups_procUpate '猪八戒',100005");
//调用带参数的存储过程System.Data.SqlClient.SqlParameter[] paras = new System.Data.SqlClient.SqlParameter[]{new System.Data.SqlClient.SqlParameter("@studentName","牛魔王"),new System.Data.SqlClient.SqlParameter("@id",100006)};context.Database.ExecuteSqlCommand("exec ups_procUpate @studentName,@id ", paras);
//调用具有查询结果的存储过程var collect = context.Database.SqlQuery<Students>("exec ups_procRead 100004");foreach (var item in collect){Console.WriteLine(item.StudentId + "\t" + item.StudentName);}

7,EF性能优化。

7.1,状态说明

EntityState
状态		    整数值		说明		            具备该状态的对象Detached 	1	    对象存在但未被跟踪	    新创建的对象UNchanged	2	    对象尚未经过修改	        使用DbContext读取的对象使用Attach()方法添加的对象执行SaveChange()后的对象Added		4	    对象为新对象,并已添加	    使用Add()方法添加的对象到上下文中Deleted		8	    对象已从上下文中删除	    使用Remove()移除对象	

7.2,优化方法

        使用AsNoTracing()方法

        不进行状态跟踪添加AsNoTracing()方法后,对象将不被状态管理,查询性能提高返回的实体将不再DbContext中缓存只适合纯粹的查询操作。

//默认状态跟踪Students stu = (from a in context.Students where a.StudentId.Equals(100004) select a).FirstOrDefault();Console.WriteLine("该Student状态:{0}", context.Entry(stu).State);//不进行状态跟踪Students stu2 = context.Students.AsNoTracking().FirstOrDefault(a => a.StudentId.Equals(100004));Console.WriteLine("该Student状态:{0}", context.Entry(stu2).State);

        禁用自动跟踪(默认开启)DbContext.Configuration.AutoDetectChangesEnabled = false;

        关闭前,当执行Add()操作时耗费大量的性能,导致DbContext遍历所有缓存的Entity,比较原始值和当前值,非常耗时。
        关闭后使用Add()告知DbContext变化即可,如果是删除使用Remove()方法,以及通过State属性告知变化。
        适合于大批量操作数据(添加,删除,修改)

 System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();Console.WriteLine("启用状态自动跟踪");context.Configuration.AutoDetectChangesEnabled = true;for (int i = 17; i < 27; i++){Console.WriteLine("第{0}次", i);StudentClass sc = new StudentClass { ClassName = $"网络{i}班", ClassId = i };Console.WriteLine("\t添加之前状态:{0}", context.Entry(sc).State);context.StudentClass.Add(sc);Console.WriteLine("\t添加之后状态:{0}", context.Entry(sc).State);}context.SaveChanges();Console.WriteLine("耗时:{0}", watch.Elapsed);Console.WriteLine("禁用状态自动跟踪");context.Configuration.AutoDetectChangesEnabled = false;watch.Restart();for (int i = 27; i < 37; i++){Console.WriteLine("第{0}次", i);StudentClass sc = new StudentClass { ClassName = $"网络{i}班", ClassId = i };Console.WriteLine("\t添加之前状态:{0}", context.Entry(sc).State);context.StudentClass.Add(sc);Console.WriteLine("\t添加之后状态:{0}", context.Entry(sc).State);}context.SaveChanges();Console.WriteLine("耗时:{0}", watch.Elapsed);

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【android】设置背景图片

改变值&#xff0c;可显示zai在 在theves下面的两个value都要增加名字代码 <item name"windowActionBar">false</item><item name"android:windowNoTitle">true</item><item name"android:windowFullscreen">tru…

Base64前端图片乱码转换

title: Base64码乱转换 date: 2024-06-01 20:30:28 tags: vue3 后端图片前端显示乱码 现象 后端传来一个图片&#xff0c;前端能够接收&#xff0c;但是console.log()后发现图片变成了乱码&#xff0c;但是检查后台又发现能够正常的收到了这张图片。 处理方法 笔者有尝试将…

联想Y410P跑大模型

安装vs 2017 查看GPU版本 查看支持哪个版本的cuda windows cuda更新教程_cuda 12.0-CSDN博客 下载并安装cuda tookit 10.1 CUDA Toolkit 10.1 Update 2 Archive | NVIDIA Developer 找到下载的文件&#xff0c;安装 参考安装链接 Win10 Vs2017 CUDA10.1安装&#xff08;避坑…

【C语言】10.C语言指针(4)

文章目录 1.回调函数是什么&#xff1f;2.qsort 使⽤举例2.1 使⽤qsort函数排序整型数据2.2 使⽤qsort排序结构数据 3.qsort函数的模拟实现 1.回调函数是什么&#xff1f; 回调函数就是一个通过函数指针调用的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数…

kafka-消费者-指定offset消费(SpringBoot整合Kafka)

文章目录 1、指定offset消费1.1、创建消费者监听器‘1.2、application.yml配置1.3、使用 Java代码 创建 主题 my_topic1 并建立3个分区并给每个分区建立3个副本1.4、创建生产者发送消息1.4.1、分区0中的数据 1.5、创建SpringBoot启动类1.6、屏蔽 kafka debug 日志 logback.xml1…

服务器数据恢复—EqualLogic存储硬盘灯亮黄色的数据恢复案例

服务器数据恢复环境&#xff1a; 一台某品牌EqualLogic PS 6011型号存储&#xff0c;底层有一组由16块SAS硬盘组建的RAID5阵列&#xff0c;上层存储空间划分了4个卷&#xff0c;格式化为VMFS文件系统&#xff0c;存放虚拟机文件。 服务器故障&#xff1a; 存储设备上两块硬盘指…

基于STC89C52单片机空气PM2.5系统设计资料

#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char //宏定义sbit RSP1^6;//液晶接口sbit ENP1^7;sbit LED P2^0;//粉尘传感器控制接口sbit ADCS P3^7;//AD0832接口sbit ADCLK P3^5;sbit ADDI P3^6;sbit ADDO P3^6;…

【大模型】基于Hugging Face调用及微调大模型(1)

文章目录 一、前言二、Transformer三、Hugging Face3.1 Hugging Face Dataset3. 2 Hugging Face Tokenizer3.3 Hugging Face Transformer3.4 Hugging Face Accelerate 四、基于Hugging Face调用模型4.1 调用示例4.2 调用流程概述4.2.1 Tokenizer4.2.2 模型的加载4.2.3 模型基本…

# RocketMQ 实战:模拟电商网站场景综合案例(二)

RocketMQ 实战&#xff1a;模拟电商网站场景综合案例&#xff08;二&#xff09; 一、SpringBoot 整合 Dubbo &#xff1a;dubbo 概述 1、dubbo 概述 Dubbo &#xff1a;是阿里巴巴公司开源的一款高性能、轻量级的 Java RPC 框架&#xff0c;它提供了三大核心能力&#xff1a…

【WP】猿人学15_备周则意怠_常见则不疑

https://match.yuanrenxue.cn/match/15 抓包分析 抓包分析有一个m参数&#xff0c;三个数字组成 追栈/扣代码 根据启动器顺序追栈&#xff0c;一般优先跳过 jQuery 直接能找到加密函数 每次获取的数字都不一样 window.m function() { t1 parseInt(Date.parse(new Date(…

【全开源】Java共享茶室棋牌室无人系统支持微信小程序+微信公众号

打造智能化休闲新体验 一、引言&#xff1a;智能化休闲时代的来临 随着科技的飞速发展&#xff0c;智能化、无人化服务逐渐渗透到我们生活的各个领域。在休闲娱乐行业&#xff0c;共享茶室棋牌室无人系统源码的出现&#xff0c;不仅革新了传统的休闲方式&#xff0c;更为消费…

Marin说PCB之如何在主板上补偿链路中的走线的等长误差?

一场雨把我困在这里&#xff0c;你冷漠地看我没有穿雨衣淋成落汤鸡。今天刚刚出门时候看天气预报没有雨&#xff0c;于是我就没有带雨衣骑电动车去公司了&#xff0c;谁知道回来的路上被淋成狗了。天气预报就像是女人的脾气那样&#xff0c;不能完全相信的。 好了&#xff0c;我…

什么是视频号招商团长?如何加入成为视频号招商团长

视频号招商团长&#xff0c;是通过微信视频号平台的线上和线下活动&#xff0c;撮合商家和达人进行合作&#xff0c;帮助商家、达人在视频号成长发展&#xff1b;同时还可以通过邀请内容创作者入驻微信视频号并为其提供支持&#xff1b;从而获取佣金收益的&#xff0c;而其作用…

【LeetCode算法】第100题:相同的树

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路&#xff1a;二叉树的先序遍历。采用递归的先序遍历方法&#xff0c;首先访问根节点若不同则返回false&#xff0c;其次访问左子树和右子树。在访问左右子树时&#xff0c;需要注意…

CAN总线学习笔记-CAN帧结构

数据帧 数据帧&#xff1a;发送设备主动发送数据&#xff08;广播式&#xff09; 标准格式的11ID不够用了&#xff0c;由此产生了扩展格式 SOF&#xff1a;帧起始&#xff0c;表示后面一段波形为传输的数据位 ID&#xff1a;标识符&#xff0c;区分功能&#xff0c;同时决定优…

【qt】项目移植

项目移植 一.前言二.同名问题三.具体操作1.修改文件名2.修改类名3.修改一些不能自动改的名4.修改.ui文件5.删除原来自动生成的ui_xxx.h文件6.修改头文件 四.导入项目五.使用导入的项目六.项目建议 一.前言 终于概率论考完了,有时间了,接着上个项目,我们继续来完成我们的多窗口开…

探索 LLM 预训练的挑战,GPU 集群架构实战

万卡 GPU 集群实战&#xff1a;探索 LLM 预训练的挑战 一、背景 在过往的文章中&#xff0c;我们详细阐述了LLM预训练的数据集、清洗流程、索引格式&#xff0c;以及微调、推理和RAG技术&#xff0c;并介绍了GPU及万卡集群的构建。然而&#xff0c;LLM预训练的具体细节尚待进一…

Qt——升级系列(Level Two):Hello Qt 程序实现、项目文件解析、Qt 编程注意事项

Hello Qt 程序实现 使用“按钮”实现 纯代码方式实现&#xff1a; // Widget构造函数的实现 Widget::Widget(QWidget *parent): QWidget(parent) // 使用父类构造函数初始化QWidget&#xff0c;传入父窗口指针, ui(new Ui::Widget) // 创建Ui::Widget类的实例&#xff0c;并…

YOLOv8_obb预测流程-原理解析[旋转目标检测理论篇]

YOLOv8_obb的预测流程,主要分预处理模块、推理模块和后处理模块。这里面有很多内容是和目标检测预测流程是重合的,主要区别在于Angle分支、NMS后处理以及regularize_rboxes部分。本文也主要介绍一下这三个模块,其他模块可以结合YOLOv8预测流程-原理解析[目标检测理论篇]一起…

Ffmpeg安装和简单使用

Ffmpeg安装 下载并解压 进入官网 (https://ffmpeg.org/download.html)&#xff0c;选择 Window 然后再打开的页面中下滑找到 release builds&#xff0c;点击 zip 文件下载 环境变量配置 下载好之后解压&#xff0c;找到 bin 文件夹&#xff0c;里面有3个 .exe 文件 然后复制…