iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >使用c# 怎么编写一个ORM框架
  • 214
分享到

使用c# 怎么编写一个ORM框架

2023-06-14 06:06:44 214人浏览 独家记忆
摘要

今天就跟大家聊聊有关使用C# 怎么编写一个ORM框架,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. ORMORM全称 Object Relational Mapping,翻译过来

今天就跟大家聊聊有关使用C# 怎么编写一个ORM框架,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1. ORM

ORM全称 Object Relational Mapping,翻译过来就是对象关系映射。是一种通过描述对象与数据库之间映射关系的数据,将对象保存到数据库中的技术。

在C#中,曾经Entity Framework光芒万丈,遮盖了其他ORM框架的光辉(甚至如今都是如此)。

后来慢慢涌现除了其他的一些ORM框架,进一步丰富了市场。所以现有比较流行的大概有以下几种:

  • Dapper 一个轻量的ORM框架

  • Entity Framework/Entity Framework Core 功能完备的框架

  • Nhibernate Java平台上著名的Hibernate的.net

  • 等等

嗯,这是我最近找到的创作组还在更新的几个框架,当然还有其他的很多有趣好用的ORM框架。欢迎各位补充哈。

这一篇的主要目的不是介绍这些框架(这是以后的内容),而是通过我们自己实现一个类ORM框架来了解底层核心。

2. 设计

我们先分析一下,如果我们设计一个实体对象与数据库之间转换的工具类应该具有哪些功能?

  • 一个属性与数据库字段的映射关系

  • 增删改查的sql模板

  • 查询结果与对象的转换

3. 实现

首先,声明一个类,因为不能仅支持一种类型,所以这个类的所有与数据库有关的方法都是泛型方法,或者这个类是泛型类,所以定义为泛型类:

public class OrmUtil<T>{}

我们事先约定类名即表名,属性名即表的列名,所以我们可以快速得到以下内容:

/// <summary>/// T的类型实例/// </summary>private Type dType;/// <summary>/// T的属性表/// </summary>private PropertyInfo[] properties;public OrmUtil(){ dType = typeof(T); properties = dType.GetProperties();}

声明一个数据库连接:

public SqlConnection Connection { get; set; }

创建一个私有方法,检查连接是否可用:

/// <summary>/// 检查连接是否可用/// </summary>/// <returns></returns>private bool CheckConnection(){ return Connection?.State == ConnectionState.Open;}

准备工作完成,然后开始编写具体的业务方法:

Insert:

public int Insert(T entity){ if (!CheckConnection()) return -1;// 检查状态 var insert = $"insert into {dType.Name}({string.Join(",", properties.Select(t => t.Name))})"; var values = properties.Select(p => p.GetValue(entity)); var commandText = $"{insert} values('{string.Join("','", values)}')"; var command = Connection.CreateCommand(); command.CommandText = commandText; var result = command.ExecuteNonQuery(); return result;}

首先按照属性名与列名之间的映射拼接 SQL,然后执行SQL命令。

Update:

public int Update(T entity,string keyName,object keyValue){ if (!CheckConnection()) return -1; var setValues = properties.ToDictionary(p => p.Name, p => $"'{p.GetValue(entity)}'"); var setSql = string.Join(",", setValues.Select(pair=>$"{pair.Key}='{pair.Value}'")); var sql = $"update {dType.Name} set {setSql} where {keyName} = '{keyValue}'"; var command = Connection.CreateCommand(); command.CommandText = sql; return command.ExecuteNonQuery();}

Update需要注意的就是如何正确拼接赋值sql。

Delete:

删除满足条件的对象:

public int Delete(T entity){ if (!CheckConnection()) return -1; var querySet = properties.Select(p => $"{p.Name} = '{p.GetValue(entity)}'"); var sql = $"delete from {dType.Name} where {string.Join(" and ", querySet)}"; var command = Connection.CreateCommand(); command.CommandText = sql; return command.ExecuteNonQuery();}

这里写法有时候根据实际业务不同,大多数情况下删除主键对应的元素,或者满足某一个条件的所有元素。这里只是做了个演示,小伙伴们可以试试自己改造一下。

Search:

先创建一个从DataTable转成对象的工具方法:

private List<T> Convert(DataTable table){ var list = new List<T>(table.Rows.Count);//事先声明一下容量 foreach(DataRow row in table.AsEnumerable()) {  T entity = Activator.CreateInstance<T>();  foreach(var p in properties)  {   if (!table.Columns.Contains(p.Name)) continue;// 如果属性名不在表格中,则忽略   p.SetValue(entity, row[p.Name]);  }  list.Add(entity); } return list;}

好,我们写一个查询方法:

public List<T> SearchAll(){ var adapter = new SqlDataAdapter($"select * from {dType.Name}", Connection); var set = new DataSet(); adapter.Fill(set); return Convert(set.Tables[0]);}

这样一个简单的ORM框架就这样形成雏形了,当然实际上的ORM底层比这复杂,因为需要支持不同的数据库,所以Connection 就不能简简单单的是一个SqlConnection了,或者底层不是像我们一样取巧使用DataTable了。

实际上的DataTable到类对象的转换要比我写的复杂一点,因为还要判断这个属性是否是可读、可写的。

看完上述内容,你们对使用c# 怎么编写一个ORM框架有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: 使用c# 怎么编写一个ORM框架

本文链接: https://www.lsjlt.com/news/268535.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用c# 怎么编写一个ORM框架
    今天就跟大家聊聊有关使用c# 怎么编写一个ORM框架,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. ORMORM全称 Object Relational Mapping,翻译过来...
    99+
    2023-06-14
  • c# 如何自己实现一个ORM框架
    目录0. 前言1. ORM2. 设计3. 实现4. 总结0. 前言 在之前的几篇内容中,我们了解了如何通过ADO.NET 访问数据库,如何修改、新增数据。如何通过DataSet和D...
    99+
    2024-04-02
  • Python之ORM框架怎么使用
    本文小编为大家详细介绍“Python之ORM框架怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python之ORM框架怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、Python语言中有哪些常...
    99+
    2023-07-02
  • 使用C++的ORM框架QxORM详解
    QxORM中,我们用的最多的无非是这两点 官方表述是这样的: 持久性:支持最常见的数据库,如SQLite、MySQL、PostgreSQL、Oracle、MS SQL Server、...
    99+
    2024-04-02
  • 如何使用C++的ORM框架QxORM
    这篇文章主要讲解了“如何使用C++的ORM框架QxORM”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用C++的ORM框架QxORM”吧!QxORM中,我们用的最多的无非是这两点官方表...
    99+
    2023-07-02
  • 如何使用go编写一个高效的文件框架?
    Go是一种非常流行的编程语言,其简单性、可靠性和高效性使其成为许多开发人员的首选语言。在本文中,我们将探讨如何使用Go编写一个高效的文件框架,让您可以轻松地读取、写入和处理文件。 一、文件操作 在Go中,我们可以使用os包来进行文件操作。...
    99+
    2023-11-10
    文件 框架 shell
  • c++中orm框架的作用是什么
    在C++中使用ORM(对象关系映射)框架的作用是简化数据库操作的过程,使程序员能够更轻松地将对象模型和数据库模型进行映射,从而减少重...
    99+
    2024-03-04
    c++
  • c++中orm框架的用法是什么
    在C++中,ORM(对象关系映射)框架的作用是用来简化数据库操作,将数据库表映射为对象,使得开发人员可以使用面向对象的方式来操作数据...
    99+
    2024-03-04
    c++
  • jquery框架怎么编写
    本篇内容主要讲解“jquery框架怎么编写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“jquery框架怎么编写”吧! jquery...
    99+
    2024-04-02
  • 使用JavaScript编写一个百度搜索框
    使用JavaScript编写一个百度搜索框?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实现原理向输入框动态输入时关键词,将当前关键词作为问号参数后面的值,因为要跨域使用百度的...
    99+
    2023-06-06
  • Python ORM框架中的SQLAlchemy怎么用
    小编给大家分享一下Python ORM框架中的SQLAlchemy怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、SQLAlchemy 介绍1.1 ORM 的概念ORM全称Object Relationa...
    99+
    2023-06-29
  • 怎么用C++编写一个井字游戏
    这篇文章主要介绍“怎么用C++编写一个井字游戏”,在日常操作中,相信很多人在怎么用C++编写一个井字游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用C++编写一个井字游戏”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-17
  • 怎么用C++编写一个Json解析器
    今天小编给大家分享一下怎么用C++编写一个Json解析器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。之前用RapidJso...
    99+
    2023-07-05
  • PHP中怎么使用ORM框架连接数据库
    这篇文章主要介绍“PHP中怎么使用ORM框架连接数据库”,在日常操作中,相信很多人在PHP中怎么使用ORM框架连接数据库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP中怎么使用ORM框架连接数据库”的疑...
    99+
    2023-07-06
  • 使用Java怎么实现一个RPC框架
    使用Java怎么实现一个RPC框架?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、RPC简介RPC,全称为Remote Procedure Call,即远程过程调用,它是一个...
    99+
    2023-05-30
    java rpc
  • 使用Vue怎么编写一个todo应用
    这篇文章将为大家详细讲解有关使用Vue怎么编写一个todo应用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。vue实现todo应用用vue实现一个简单应用,应用中用到vue相关核心功能,然后...
    99+
    2023-06-06
  • java程序框架怎么编写
    编写一个Java程序框架需要以下步骤: 确定框架的目标和功能:明确框架的用途和提供的功能,例如Web开发框架、数据处理框架等。 ...
    99+
    2023-10-23
    java
  • 怎么使用Python元类编程实现一个简单的ORM
    这篇文章主要讲解了“怎么使用Python元类编程实现一个简单的ORM”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python元类编程实现一个简单的ORM”吧!概述什么是ORM   ...
    99+
    2023-07-05
  • 使用Python怎么实现一个ORM模型
    本篇文章为大家展示了使用Python怎么实现一个ORM模型,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。元类对于元类,我的理解其实也便较浅,大概是这个意思所有的类都是使用元类来进行创建的,而所有的类...
    99+
    2023-06-15
  • Flutter怎么用ORM框架管理数据库
    本篇内容主要讲解“Flutter怎么用ORM框架管理数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Flutter怎么用ORM框架管理数据库”吧!floor 数据库版本升级floor 框架同...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作