轻量级ORM框架Light.Data使用指南

在现代软件开发中,数据持久化是一个不可或缺的环节。ORM(对象关系映射)框架的出现使得开发者能够以面向对象的方式操作数据库,从而提高开发效率和代码的可维护性。Light.Data是一个轻量级的ORM框架,它支持多种数据库,提供了丰富的功能,包括CRUD操作、数据聚合、多表查询等。本文将详细介绍如何使用Light.Data进行数据库操作

安装Light.Data

要使用Light.Data,首先需要通过NuGet安装相应的库。根据所使用的数据库类型,需要安装不同的包。以下是一些常见数据库的安装指令:

PM> Install-Package Light.Data PM> Install-Package Light.Data.Mssql PM> Install-Package Light.Data.Mysql PM> Install-Package Light.Data.Postgre

安装完成后,可以通过访问官方文档和GitHub页面获取更多信息:

  • 文档:
  • GitHub:

数据库配置

在开始使用Light.Data之前,需要配置数据库连接。以下是一个JavaScript格式的配置示例:

{ "lightData": { "connections": [ { "name": "mssql_db", "connectionString": "....", "providerName": "Light.Data.Mssql.MssqlProvider, Light.Data.Mssql" }, { "name": "mysql_db", "connectionString": "....", "providerName": "Light.Data.Mysql.MysqlProvider, Light.Data.Mysql" } ] } }

这个配置定义了两个数据库连接,分别用于连接SQL Server和MySQL数据库。

使用Light.Data

Light.Data提供了多种方式来使用。以下是一些常见的使用方式:

// 直接使用 DataContext context = new DataContext("mssql"); // 创建子类 public class MyDataContext : DataContext { public MyDataContext() : base("mssql") { } } // 创建子类并使用选项 public class MyDataContext : DataContext { public MyDataContext(DataContextOptions<MyDataContext> options) : base(options) { } } // 直接配置连接字符串和参数(IServiceCollection) service.AddDataContext<MyDataContext>(builder => { builder.UseMssql(connectionString); builder.SetTimeout(2000); builder.SetVersion("11.0"); }, ServiceLifetime.Transient); // 使用默认配置文件配置(IServiceCollection) service.AddDataContext<MyDataContext>(DataContextConfiguration.Global, config => { config.ConfigName = "mssql"; }, ServiceLifetime.Transient);

这些代码展示了如何创建数据上下文、配置数据库连接以及使用依赖注入的方式集成到服务中。

对象映射

对象映射是ORM框架的核心功能之一。Light.Data通过属性和配置文件将类映射到数据库表。以下是一个简单的对象映射示例:

[DataTable("Te_User", IsEntityTable = true)] public class TeUser { [DataField("Id", IsIdentity = true, IsPrimaryKey = true)] public int Id { get; set; } [DataField("Account")] public string Account { get; set; } [DataField("Telephone", IsNullable = true)] public string Telephone { get; set; } }

这个类定义了一个用户表的映射,包括用户ID、账户和电话号码等字段。

子表映射

在处理复杂的数据关系时,子表映射是一个常用的功能。以下是一个子表映射的示例:

[DataTable("Te_UserExtend", IsEntityTable = true)] public class TeUserExtend { [DataField("Id", IsIdentity = true, IsPrimaryKey = true)] public int Id { get; set; } [DataField("MainId")] public int MainId { get; set; } [DataField("Data", IsNullable = true)] public string Data { get; set; } } public class TeUserAndExtend : TeUser { [RelationField("Id", "MainId")] public TeUserExtend Extend { get; set; } }

这个示例定义了一个用户扩展表,并将其与用户表关联起来。

基本操作

Light.Data支持基本的CRUD操作,包括批量操作、事务处理、数据字段的默认值和自动时间戳等。以下是一个基本操作的示例:

var context = new DataContext(); // 查询单个数据 var item = context.Query<TeUser>().Where(x => x.Id == 10).First(); // 查询集合数据 var list = context.Query<TeUser>().Where(x => x.Id > 10).ToList(); // 创建数据 var user = new TeUser() { Account = "foo", Password = "bar" }; context.Insert(user); // 更新数据 user.Password = "bar1"; context.Update(user); // 删除数据 context.Delete(user);

这些代码展示了如何使用Light.Data进行数据的查询、插入、更新和删除操作。

数据聚合

数据聚合是数据分析中的一个重要功能。Light.Data支持单列数据的直接聚合和多列数据的分组聚合。以下是一个数据聚合的示例:

var list = context.Query<TeUser>() .Where(x => x.Id >= 5) .GroupBy(x => new LevelIdAgg() { LevelId = x.LevelId, Data = Function.Count() }) .ToList();

这个示例展示了如何对用户数据进行分组聚合操作。

多表查询

在处理复杂的业务逻辑时,多表查询是一个常用的功能。Light.Data支持内连接、左连接和右连接等多表查询方式。以下是一个多表查询的示例:

var join = context.Query<TeUser>() .Join<TeUserExtend>((x, y) => x.Id == y.Id);

这个示例展示了如何进行内连接查询。

执行SQL

在某些情况下,可能需要直接执行SQL语句或存储过程。Light.Data提供了直接执行SQL和存储过程的功能。以下是一个执行SQL的示例:

var sql = "update Te_User set NickName=@P2 where Id=@P1"; var ps = new DataParameter[2]; ps[0] = new DataParameter("P1", 5); ps[1] = new DataParameter("P2", "abc"); var executor = context.CreateSqlStringExecutor(sql, ps); var ret = executor.ExecuteNonQuery();

这个示例展示了如何使用参数化查询执行更新操作。

单元测试

为了确保代码的稳定性和可靠性,单元测试是必不可少的。Light.Data项目使用xUnit进行单元测试,测试代码地址为:。每个数据库都有超过300套测试,覆盖了大部分代码。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485