用sqlsugar在不定义外键的情况下实现导航查询, CodeFirst实现建表

.net core通过sql sugar codefirst新建达梦数据库表 sqlsugar目前不支持通过code first给达梦建库,但是支持建表。 我是先通过dbeaver建好了数据库,只通过sql sugar的code first建表 阅读详情

定义sqlsugar的helper

使用文档:

https://www.donet5.com/Home/Doc?typeId=1206

using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace sugarTest.Provider
{
    public class SqlSugarHelper
    {
        public static string ConnectionString = string.Empty; //必填, 数据库连接字符串
        public static SqlSugarClient db
        {
            get => new SqlSugarClient(new ConnectionConfig()
            {
                ConnectionString = ConnectionString,
                DbType = DbType.Sqlite,         //必填, 数据库类型
                IsAutoCloseConnection = true,       //默认false, 时候知道关闭数据库连接, 设置为true无需使用using或者Close操作
                InitKeyType = InitKeyType.Attribute    //默认SystemTable, codefist需要使用Attribute
            });
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace sugarTest.Provider
{
    public class SqlSugarService
    {
        /// <summary>
        /// 设置连接字符串
        /// </summary>
        /// <param name="ConnectionStr"></param>
        public static void SetConnectionStr(string ConnectionStr)
        {
            SqlSugarHelper.ConnectionString = ConnectionStr;
        }
    }
}

定义两个实体类

using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace sugarTest.Model
{
    public class Order
    {
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Id { get; set; }
        public string Name { get; set; }
        public string Descript { get; set; }

        //在SqlSugar中导航属性需要配置为忽略,避免被直接解析为SQL,否则会提示Sequence contains no elements
        [SugarColumn(IsIgnore = true)] 
        public List<OrderItem> OrderItems { get; set; } = new List<OrderItem>();
}
}

using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace sugarTest.Model
{
    public class OrderItem
    {
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Id { get; set; }
        public string ItemCode { get; set; }
        public decimal Pirce { get; set; }

        //外键, 需要自己指定, 使用关键词First()
        public int OrderId { get; set; }

        //在SqlSugar中导航属性需要配置为忽略,避免被直接解析为SQL,否则会提示Sequence contains no elements
        [SugarColumn(IsIgnore = true)] 
        public Order Order { get; set; }
    }
}

实现一对多查询

using sugarTest.Model;
using sugarTest.Provider;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace sugarTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Load += Form1_Load;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            SqlSugarService.SetConnectionStr("Data Source=" + Application.StartupPath + str2);
            //this.DGV.AutoGenerateColumns = false;
            //this.DGV.Columns[0].FillWeight = 25;
            //this.DGV.Columns[1].FillWeight = 25;
            //this.DGV.Columns[2].FillWeight = 25;
            //this.DGV.Columns[3].FillWeight = 25;
        }
        
        string str2 = "\\Config\\Test.db;Pooling=true;FailIfMissing=false";

        private void btnQuery_Click(object sender, EventArgs e)
        {
            SugarResponsitory sugarResponsitory = new SugarResponsitory();
            //var list = sugarResponsitory.Db.Queryable<Order>().ToList();

            //多表查询
            //需要注意的是,这两个是固定写法。
            //其中,一对一要求必须从主对象开始查询。所谓主对象就是必须持有一个外键指向另一个表。
            //一对多要求从拥有集合属性的那段(也就是其中的“一”)开始,关联指示为 集合.First().外键 。
            //还有一点就是SqlSugar的导航属性必须手动加载,不会自动加载进来,所以完全不会出现深度递归的问题。
            var list = sugarResponsitory.Db.Queryable<Order>().
                Mapper(it => it.OrderItems, it => it.OrderItems.First().OrderId).Where(it=>it.Id>2).ToList();

            //如果 Order 中定义的是 public OrderItem OrderItem { get; set; } 则为一对一查询
            //var list = sugarResponsitory.Db.Queryable<Order>().
            //    Mapper(it => it.OrderItem, it => it.OrderItem.First().OrderId).Where(it => it.Id > 2).ToList();

            this.DGV.DataSource = list;
        }

        //直接运行 没有数据库也会建立Test.db
        private void btnCreateDataBase_Click(object sender, EventArgs e)
        {
            SugarResponsitory sugarResponsitory = new SugarResponsitory();
            //sugarResponsitory.db.DbMaintenance.CreateDatabase();
            sugarResponsitory.Db.CodeFirst.SetStringDefaultLength(200).InitTables(typeof(OrderItem));
            sugarResponsitory.Db.CodeFirst.SetStringDefaultLength(200).InitTables(typeof(Order));
            //三种重载
            //void InitTables(string entitiesNamespace);
            //void InitTables(string[] entitiesNamespaces);
            //void InitTables(params Type[] entityTypes);
        }
    }
}

using SqlSugar;
using sugarTest.Model;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace sugarTest.Provider
{
    public class SugarResponsitory
    {
        private SqlSugarClient _db = SqlSugarHelper.db;
        public SqlSugarClient Db { get => _db; set => _db = value; }

        public OrderItem GetProduct(int Id)
        {
            return _db.Queryable<OrderItem>().First(p => p.Id == 2);
        }

    }
}

在这里插入图片描述

SqlSugar ORM实战:.NET Core中如何用CodeFirst快速生成数据库表(附完整代码) 本文详细介绍了在.NET Core中使用SqlSugar ORM的CodeFirst模式快速生成数据库表的实战指南。通过具体代码示例展示了实体设计、数据库迁移、性能优化等关键环节,帮助开发者提升开发效率,特别适合敏捷开发场景。文章还分享了索引优化、分表策略等高级技巧,以及常见问题的解决方案。 阅读详情

相关推荐

.NET Core 6集成SqlSugar:CodeFirst、CRUD到分页事务实战指南

在.NET后端开发中,ORM选型是数据访问层的核心决策之一。EF Core功能强大但学习曲线陡峭,Dapper轻量却需手写大量SQL映射,而SqlSugar以低门槛、链式API和贴近业务的特性成为快速开发的有力选择。它支持CodeFirst自动建表、内置分页与事务控制,还能通过简单配置实现多数据库切换,大幅降低中小型项目的数据访问复杂度。无论是后台管理系统、内部工具还是快速原型,SqlSugar都能让开发者将精力集中在业务逻辑上。本文从NuGet安装、ConnectionConfig配置、实体映射开始,逐步

weixin_29230649的博客 206

五、SQLSugar 配置实体(CodeFirst&DBFirst)

几年后回来看就是个无聊的demo

HiDaJing 7975

Sqlsugar补充自定义模板

注意SettingPropertyTemplate可能和IsCreateAttribute存在冲突一般不要一起使用,因为这俩都是向实体类属性上添加特性的。db.DbFirst/*修改old值替换*/ })//类构造函数/*修改old值替换*/ })//实体类追加引用SqlSugar,})/*修改old值替换*/}) //属性备注//属性:新重载 完全自定义用配置//[SettingClassTemplate]-------------自定义类模板(添加基类和接口)

m0_68206177的博客 416

C#架构设计,基于SqlSugar的CodeFirst一套数据库访问交互框架设计,一行代码配置假删除

SqlSugar是一个基于.NET的ORM(对象关系映射)库,它提供了简单而强大的方式来操作数据库。SqlSugar支持CodeFirst(基于代码的数据库设计)和DbFirst(基于数据库的代码生成)两种开发模式,根据项目需要选择适合的方式。面向对象的设计: SqlSugar采用面向对象的设计理念,使得开发者可以使用对象来表示数据库表,简化了数据操作。SqlSugar是一个基于.NET的国产ORM(对象关系映射)库,它提供了简单而强大的方式来操作数据库。依赖注入所有的Service。

一个专注于技术研究创新的程序员 1443

Net8 ABP VNext实战:集成FreeSql与SqlSugar双ORM方案

本文详细介绍了在Net8 ABP VNext框架中集成FreeSql与SqlSugar双ORM方案的实战步骤。通过对比两种国产ORM的特点与性能,提供了模块化配置、仓储层设计及服务层集成的完整解决方案,帮助开发者根据项目需求灵活选择技术栈,提升开发效率与系统性能。

weixin_30417487的博客 179

深入解析SqlSugar:.NET领域的高性能多数据库ORM框架

SqlSugar是一款高性能、多数据库支持的.NET ORM框架,以简单易用和卓越性能著称。它提供直观的API设计,支持链式编程和Lambda表达式,在复杂查询场景中比EF Core快35%-50%。其核心优势包括广泛的多数据库支持(主流+国产+时序库)、内置高性能批量操作、灵活的建表机制(CodeFirst/DbFirst)以及读写分离等高级功能。与主流ORM相比,SqlSugar在性能、易用性和多数据库兼容性方面表现突出,特别适合追求高性能的中小项目和国内企业应用。通过简洁的代码示例展示了快速上手流程,

guigenyi的专栏 882

1_SqlSugar-表到实体、实体到表及库表操作

SqlSugar-表映射到实体、实体映射到表及通过代码进行库表操作。

Justinyh的博客 5819

.NET Core实战项目:WEB API(1)

用.NET5建立一个.NET Core的WEB API项目,主要做的是基础的分页,查询,CURD,帮组大家学习.NET Core

weixin_49336442的博客 4900

开源测试_sqlsugar

【代码】开源测试_sqlsugar。

备忘 581

osg3.6.5---osgEarth3.2 实现数字地球的加载

目前我在网上找得比较多的是osgearth2.10及以下的版本及加载数字地球的方法,但是我使用的是osg3.6.5和osgEarth3.。但是3.x版本和2.x版本差别很大,主要区别在于2.x有7个主要库,而3.x版本只有osgEarth这一个库。所以,特别记录一下。后面我讲他集成到qt的窗体在上传更新新的代码。1.直接上源码pro文件和cpp文件。

枫影竹韵的博客 1008

[Ethernet in CANoe]4--CANoe工程中SOME/IP报文的详细介绍(二)

介绍了SOME/IP报文的SD报文(ServiceDiscovery),本片文章开始继续介绍SOME/IP报文。

汽车ECU自动化测试 1113

SQLSugar ORM框架:高效数据访问与安全实践

ORM(对象关系映射)技术通过将数据库表映射为编程语言中的对象,简化了数据访问层的开发。其核心原理是利用反射和表达式树等技术,将面向对象的操作转换为SQL语句,同时自动处理参数化查询以防止SQL注入攻击。在.NET生态中,SQLSugar作为一款高性能ORM框架,不仅支持多数据库无缝切换(如SQL Server、MySQL等),还提供了Lambda表达式构建类型安全查询、CodeFirst开发模式等实用功能。对于企业级应用而言,ORM框架能显著提升开发效率,降低维护成本,特别是在处理分表分库、批量操作、多租

weixin_33895657的博客 422

人工智能情感分析实战:文本情绪识别

人工智能情感分析,特别是文本情绪识别,已成为理解和处理人类情感信息的重要工具。通过数据预处理、特征提取、模型训练与评估等步骤,我们可以有效地从文本数据中提取情感信息,为各种应用场景提供有价值的洞察。随着技术的不断进步和创新,情感分析的应用前景将更加广阔,为我们的生活和工作带来更多便利和机遇。

shejizuopin的博客 1095

用SQLSugar快速构建管理系统原型:1小时开发实战

我选择了SQLSugar+ASP.NET Core MVC的技术栈,结果从零开始到完整功能只用了不到1小时,SQLSugar的数据访问层简化效果真的惊艳。上做了部署测试,发现他们的ASP.NET Core环境预装好了所有依赖,一键部署特别顺畅。配置数据库连接时,SQLSugar的简洁语法让我印象深刻 - 只需几行代码就完成了MySQL连接配置,连DbContext都不需要单独创建。使用SQLSugar的CodeFirst功能,直接通过C#类定义数据结构,省去了手动建表的繁琐步骤。简单的部门人数统计报表。

GreyWolf12的博客 745

同花顺 python量化交易_开启量化第一步!同花顺iFinD数据接口免费版简易操作教程...

来源:雪球App,作者: 同花顺-iFinD,(https://xueqiu.com/6706494343/141951051)金融市场波动频繁,投资往往会夹杂非理性的情绪。而量化交易,旨在以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种“大概率”事件以制定策略,辅助投资者进行理性投资。不过计算机分析存在一定的技术门槛,有没有简单易学的量化交易方式,能够...

weixin_35911805的博客 2万+

高频面试题-项目介绍篇

聊聊如何介绍项目经历。

m0_73359763的博客 1908

【开篇必看】.NET开源 ORM 框架 【SqlSugar系列】

💦1. 什么是ORM?对象-关系映射(,简称ORM),面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。2. 为什么使用ORM?

李赛赛的专栏 1908

Arduino DHT11 ESP8266 在OneNet云平台上读取 温湿度

#include "ESP8266.h" #include "dht11.h" #include "SoftwareSerial.h" #define SSID "540ND" #define PASSWORD "" #define HOST_NAME "api.heclouds.com" #define DEVICE_ID "" #define HOST_PORT (80) String APIKey = " "; #define INTER

weixin_45852947的博客 2430

SqlSugar

SqlSugar

xie__jin__cheng的博客 553

K-Core, K-Shell & K-Crust傻傻分不清楚

K-Core(K-核)就是所有大于等于K的K-Shell的并集;K-Crust(K-皮)就是所有小于等于K的K-shell的并集。

欢迎订阅 -- 小源笔迹 2255

【YOLOv12多模态融合改进】| TFAM:时序融合注意力模块 | 引入通道 - 空间双分支注意力机制,解决双模态特征融合中时序关联不足的问题

TFAM模块通过时序信息驱动的注意力机制,解决了双时相特征融合中时序关联不足的问题,实现了更精准的变化区域定位和特征表示。其结构轻量、泛化性强,为变化检测任务提供了一种高效的特征融合解决方案。

Limiiiing的博客 866

零基础入门SQLSugar:30分钟搭建个人博客系统

记得同时安装SQLite的驱动包,因为我们打算用SQLite做数据库,免去配置SQL Server的麻烦。创建一个User模型存储账号密码,用ASP.NET Core自带的Identity太复杂,我们直接用Session做个简易版。创建Category模型后,我们需要建立文章和分类的关系。这里用到了SQLSugar的导航属性功能,通过在Article模型里添加Category属性和外键,就能轻松实现关联查询。用SQLSugar的CodeFirst功能可以自动生成这些表,我们只需要定义对应的C#模型类就行。

AgatePanther34的博客 399

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

为什么 FreeSql 被称为第一款国产 AOT ORM?一文读懂这个强大的国产 ORM 组件

**FreeSql** 是一款功能强大的国产对象关系映射(O/RM)组件,支持 .NET Core 2.1+、.NET Framework 4.0+、Xamarin 以及 **AOT 预生成**,被官方定位为“第一款国产 AOT ORM”。如果你正在寻找一款能替代 EF Core、支持多种数据库、性能出色的国产 ORM,这篇文章将带你快速读懂它的核心能力与适用场景。 [![FreeSql 功能特

gitblog_00311的博客 849

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

第4章 初识SqlSugarCore之实体与实体特性

本章将通过对示例“22-09-29-03_SqlSugarAcquaintance(初识SqlSugarCore之ConfigureOptions注入实现)”的重构,在Code-Frist模式下,把多个实体及其特性通过“SqlSugarCore”中间件,一次性的在指定的数据库软件的指定数据库中自动生成所有的表、字段及其相应的约束规则。 使用“SqlSugarCore”中间件进行开发的开发者们把定义在实体中的形如

zhoujian_911的专栏 2024

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

FreeSql 与 EntityFramework 比较

与 EntityFramework 比较 为什么要写这篇文章? 希望针对 SEO 优化搜索引擎,让更多中国人知道并且使用。目前百度搜索 .NET ORM 全是 sqlsugar,我个人是无语的,每每一个人进群第一件事就是拿来比较,每天要重复回答、重复解答、说服他们。想说服标签是名气大、使用者多的同类型 .NET ORM 非常困难,最多只能让他们勉强接受。 FreeSql 不愿做自己发光的金子,希望在 2020年 写下这篇完整一点的 .NET ORM 比较,为准备使用 FreeSql 的朋友解惑,能排上百度搜

极客神殿 818

【Code First】.NET开源 ORM 框架 SqlSugar 系列

💕通过Code First 方式创建表,做数据迁移等。💦

李赛赛的专栏 2736
上一篇: 二叉树的遍历
下一篇: 用Java 通过JDBC完成对Oracle数据的操作
潘诺西亚的火山
博客等级 码龄10年 7415粉丝 283原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘诺西亚的火山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值