IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> SqlSugar 2.实体配置 -> 正文阅读

[游戏开发]SqlSugar 2.实体配置

1.实体使用自带特性

对于CURD来说,只需要配置主键和自增列就行;类的名称和数据库表名不同时,也可设置

1.1 主键自增
[SugarTable("dbstudent")]//当和数据库名称不一样可以设置表别名 指定表明
public class Student
{
    [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]//数据库是自增才配自增 
    public int Id { get; set; }

    public int? SchoolId { get; set; }

    [SugarColumn(ColumnName = "StudentName")]//数据库与实体不一样设置列名 
    public string Name { get; set; }
}
//创建表语句
db.CodeFirst.SetStringDefaultLength(200).InitTables(typeof(Student));
1.2 双主键、复合主键、联合主键、多个主键
public?class?Student
{
????[SugarColumn(IsPrimaryKey?=?true)]?//设置主键
????public?Guid??Pk1{?get;?set;?}
????[SugarColumn(IsPrimaryKey?=?true)]?//设置主键
????public?Guid??Pk2{?get;?set;?}
????public?string?Name?{?get;?set;?}
}
1.3 无主键
public?class?Student
{
????public?Guid??Id{?get;?set;?}
????public?string?Name?{?get;?set;?}
}

2.实体使用自定义特性

2.1 创建特性的类
    /// <summary>
??? /// 给类添加的特性
??? /// </summary>
??? [AttributeUsage(AttributeTargets.Class, Inherited = true)]
??? public class SugarTest1 : Attribute
??? {
??????? public SugarTest1()
??????? {}
??????? public string TestTableName { get; set; }

??????? public SugarTest1(string name)
??????? {
??????????? this.TestTableName = name;
??????? }
??? }


??? /// <summary>
??? /// 给属性添加的特性
??? /// </summary>
??? [AttributeUsage(AttributeTargets.Property, Inherited = true)]
??? public class SugarTest2 : Attribute
??? {
??????? private string _ColumnName1;
??????? public string ColumnName1
??????? {
??????????? get { return _ColumnName1; }
??????????? set { _ColumnName1 = value; }
??????? }
        
??????? private bool _IsIgnore1;
??????? public bool IsIgnore1
??????? {
??????????? get { return _IsIgnore1; }
??????????? set { _IsIgnore1 = value; }
??????? }
??? }
2.2 创建带自定义特性的实体类
?   [SugarTest1("TestClass")]
??? public class Test
??? {
??????? [SugarTest2(IsIgnore1 = true)]

??????? public int Id { get; set; }

??????? public string Name { get; set; }

??????? public string Age { get; set; }

??????? public string Address { get; set; }

??????? public string Area { get; set; }
??? }
2.3在创建SqlSugarClient对象中添加代码
                ConfigureExternalServices = new ConfigureExternalServices()
??????????????? {
                    //设置列相关的属性
??????????????????? EntityService = (property, column) =>
??????????????????? {
??????????????????????? var attributes = property.GetCustomAttributes(true);//get all attributes 
                        
                        //如果不清楚具体走了哪个自定义特性,可以打印出来看看
??????????????????????? foreach (var attribute in attributes)
??????????????????????? {
??????????????????????????? if (attribute is SugarTest1)
??????????????????????????? {
??????????????????????????? }
??????????????????????????? if (attribute is SugarTest2)
??????????????????????????? {
??????????????????????????? }
??????????????????????? }
??????????????????????? if (attributes.Any(it => it is SugarTest2))// by attribute set primarykey
??????????????????????? {
??????????????????????????? column.DbColumnName = "小列"; 
??????????????????????? }
??????????????????? },
                    
                    //设置表的属性
??????????????????? EntityNameService = (type, entity) =>
??????????????????? {
??????????????????????? var attributes = type.GetCustomAttributes(true);
??????????????????????? if (attributes.Any(it => it is SugarTest1))
??????????????????????? {
??????????????????????????? entity.DbTableName = "小表";
??????????????????????? }
??????????????????? }
??????????????? }
2.4添加创建表的代码,查看效果

断点打到2.3的位置上

//创建表
db.CodeFirst.SetStringDefaultLength(200).InitTables(typeof(Test));

3.实体不使用特性

创建对象的时候,根据规则,指定哪个字段主键,哪个字段自增;这样就不需要在实体添加特性

var?db=?new?SqlSugarClient(new?ConnectionConfig()
{
?DbType?=?SqlSugar.DbType.MySql,
?ConnectionString?=?Config.ConnectionString,
?sAutoCloseConnection?=?true,
?ConfigureExternalServices=new?ConfigureExternalServices()?{
????EntityService?=?(t,?column)?=>?
????{
????????if?(column.PropertyName.ToLower()?==?"id")?//是id的设为主键
????????{
????????????column.IsPrimarykey?=?true;
????????????if?(column.PropertyInfo.PropertyType?==?typeof(int))?//是id并且是int的是自增
????????????{
????????????????column.IsIdentity?=?true;
????????????}
????????}
????}
}
});

4.特性明细

下面是CRUD用到的特性,不包含建表的属性

名称描述
IsIdentity自增列
IsPrimaryKey创建主键
ColumnName实体类属性和数据库列名不同时,设置数据库列名
IsIgnoreORM不处理该列 [即忽略]
IsOnlyIgnoreInsert插入操作时不处理该列 [插入时忽略]
IsOnlyIgnoreUpdate更新操作时不处理该列 [更新时忽略]
OracleSequenceName设置Oracle序列,设置后该列等同于自增列
ColumnDescription备注
Length长度
IsNullable是否可以为Null;默认False
DecimalDigits精度;decimal(18,2),Length=19,DecimalDigits=2
OldColumnName修改列名用,这样不会新增或删除列
IsDisabledDelete禁止删除列
IsDisabledUpdateAll禁止所有更新表的操作
ColumnDataType字段类型

注意:

  • EntityInfo:关于数据库表的一些属性
  • EntityColumnInfo:关于数据库表字段的一些属性

文档参考:配置实体

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:26:53  更:2022-04-29 12:26:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:44:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码