轻量级ORM开发系列:对象关系以及级联操作的探讨
ORM全称Object/Relation Mapping 即对象关系映射,既然开发ORM,那就无可避免的要涉及到对象之间的关系。
通过面向对象思想的抽象, 可以将对象间的关系定义为一下几种:
- 一对一
- 多对一(一对多)
- 多对多
我们可以很简单的对对象关系建立一个枚举.
public enum Relation
{
None=1,
OneToMany,
ManyToOne,
OneToOne,
ManyToMany
}
这个Relation的枚举将会在RelationAttribute中运用,具体情况可以参见 轻量级ORM开发系列:Attribute准备
下面我们来看一下级联操作
主流的数据库都支持Cascade操作,下面我们给一个 Cascade操作的小例子——级联删除
create table a
(
id varchar(20) primary key,
password varchar(20) not null
)
create table b
(
id int identity(1,1) primary key,
name varchar(50) not null,
userId varchar(20),
foreign key (userId) references a(id) on delete cascade
)
表B创建了外码userId 对应A的主码ID,声明了级联删除
测试数据:
insert a values ('11','aaa')
insert a values('23','aaa')
insert b values('da','11')
insert b values('das','11')
insert b values('ww','23')
删除A表内id为‘11’的数据,发现B表内userId 为“11”也被数据库自动删除了,这就是级联删除
delete a where id='11'
数据库一般支持的级联有ON UPDATE CASCADE和ON DELETE CASCADE
如果我们可以很好的运用这些关系的话,我们就可以实现像nhibernate一样的级联删除。
下面我们 一个级联枚举
public enum Cascade
{
All,
SaveOrUpdate,
Delete,
None
}
这个Cascade的枚举将会在RelationAttribute中运用,具体情况可以参见 轻量级ORM开发系列:Attribute准备
好了,今天的讨论就到这里了,十点半了。各位晚安!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?