主键(Primary Key)

class Topic {[Column(IsPrimary = true)]public int Id { get; set; }
}

约定:

  • 当没有指明主键时,命名为 id 的字段将成为主键;(不区分大小写)

  • 当主键是 Guid 类型时,插入时会自动创建(有序、不重复)的值,所以不需要自己赋值;(支持分布式)

自增(Identity)

class Topic {[Column(IsIdentity = true)]public int Id { get; set; }
}

约定:

  • 当没有指明主键时,标记自增的成员将成为主键;

唯一键(Unique Key)

class AddUniquesInfo {public Guid id { get; set; }[Column(Unique = "uk_phone")]public string phone { get; set; }[Column(Unique = "uk_group_index, uk_group_index22")]public string group { get; set; }[Column(Unique = "uk_group_index")]public int index { get; set; }[Column(Unique = "uk_group_index22")]public string index22 { get; set; }
}

唯一键,在多个属性指定相同的标识,代表联合键;可使用逗号分割多个 UniqueKey 名。

数据库类型(DbType)

class Topic {[Column(DbType = "varchar(128) NOT NULL")]public string Title { get; set; }
}

可以在类型上指定 NOT NULL,也可以通过 [Column(IsNullable = false)] 设置;

0.9.12 版本增加了对 MaxLength 特性的解析,避免字符串常用时的麻烦,上面的 varchar(128) 可改写成:

class Topic {[MaxLength(128)]public string Title { get; set; }
}
说明:由于内部按名称反射查找特性的,所以 MaxLengthAttribute 可以在任意地方定义。
该特性通常定义在 System.ComponentModel.DataAnnotations.MaxLengthAttribute。
如果找不到该类,可自行在项目中定义名称为 MaxLengthAttribute 的特性类,如下:public class MaxLengthAttribute : Attribute
{public int Length { get; }public MaxLengthAttribute(int length){this.Length = length;}
}

可空(Nullable)

class Topic {[Column(IsNullable = false)]public string Title { get; set; }
}

在不指定 DbType、IsNullable 时,FreeSql 提供默认设定,如:

  • int -> not null(不可为空)
  • int? -> null(可空)

一般在使用 string 类型时,才需要手工指明是否可空(string 默认可空);

忽略(Ignore)

class Topic {[Column(IsIgnore = true)]public string Title { get; set; }
}

当实体有属性不需要映射的时候使用,内部自动忽略了对象的映射;

当实体内的属性不是可接受的类型时,可以不用指定该特定,如下不必要的指定:

class Topic {[Column(IsIgnore = true)]public Topic Parent { get; set; }
}

乐观锁(RowVersion)

class Topic {public Guid id { get; set; }public string Title { get; set; }[Column(IsVersion = true)]public int Version { get; set; }
}

更新整个实体数据时,在并发情况下极容易造成旧数据将新的记录更新。

行级锁的原理,是利用实体某字段,如:long version,更新前先查询数据,此时 version 为 1,更新时产生的 SQL 会附加 where version = 1,当修改失败时(即 Affrows == 0)抛出异常。

每个实体只支持一个行级锁属性。

适用 SetSource 更新,无论使用什么方法更新 version 的值都会增加 1

自定义类型映射(MapType)

class EnumTestMap {public Guid id { get; set; }[Column(MapType = typeof(string))]public ToStringMapEnum enum_to_string { get; set; }[Column(MapType = typeof(string))]public ToStringMapEnum? enumnullable_to_string { get; set; }[Column(MapType = typeof(int))]public ToStringMapEnum enum_to_int { get; set; }[Column(MapType = typeof(int?))]public ToStringMapEnum? enumnullable_to_int { get; set; }[Column(MapType = typeof(string))]public BigInteger biginteger_to_string { get; set; }[Column(MapType = typeof(string))]public BigInteger? bigintegernullable_to_string { get; set; }
}
public enum ToStringMapEnum { 中国人, abc, 香港 }

应该不需要解释了吧?

BigInteger 都可以映射使用了,但请注意:仅仅是 CURD 方便, Equals == 判断可以使用,无法实现 + - * / 等操作;

v0.9.15 版本还可以将值对象映射成 typeof(string),安装扩展包:

dotnet add package FreeSql.Extensions.JsonMap

fsql.UseJsonMap(); //开启功能class TestConfig
{public int clicks { get; set; }public string title { get; set; }
}
[Table(Name = "sysconfig")]
public class S_SysConfig<T>
{[Column(IsPrimary = true)]public string Name { get; set; }[JsonMap]public T Config { get; set; }
}

字段位置(Position)

适用场景:当实体类继承时,CodeFirst创建表的字段顺序可能不是想要的,通过该特性可以设置顺序。

创建表时指定字段位置,如:[Column(Position = 1],可为负数即反方向位置;

可插入(CanInsert)、可更新(CanUpdate)

该字段是否可以插入或更新,默认值true,指定为false插入或更新时该字段会被忽略。

当指明了 InsertColumn/UpdateColumns 等方法时,该特性作用可能失效。例如 CanInsert = false 时,又指明了 InsertColumns 该属性,则仍然会插入。

名称

FreeSql 默认使用实体的类名,或属性名与数据库映射,也可以指定映射的名称;

指定实体的表名,指定 Name 后,实体类名变化不影响数据库对应的表。FreeSql尽量支持了对多数据库或schema支持,不防试试指定表名为:其他数据库.表名,不同数据库的指定方式有差异,这一点以后深入解答。

[Table(Name = "db2.tb_topic111")]
class Topic {//...
}

指定实体的表名,修改为实体类名。指定数据库旧的表名,修改实体命名时,同时设置此参数为修改之前的值,CodeFirst才可以正确修改数据库表;否则将视为【创建新表】。

[Table(OldName = "Topic")]
class Topic2 {//...
}

实体的属性也有相同的功能,[Column(Name = "xxx")]

禁用迁移

IFreeSql.CodeFirst.IsAutoSyncStructure 可设置全局【自动迁移结构】功能,也可通过 FreeSqlBuilder.UseAutoSyncStructure(true) 创建 IFreeSql 的时候设置功能。

当【实体类】对应的是数据库【视图】或者其他时,可通过 [Table(DisableSyncStructure = true)] 禁用指定的实体迁移操作。

[Table(DisableSyncStructure = true)]
class ModelDisableSyncStructure {[Column(IsPrimary = false)]public int pkid { get; set; }
}

备注

FreeSql CodeFirst 支持将 c# 代码内的注释,迁移至数据库的备注。先决条件:

1、实体类所在程序集,需要开启 xml 文档功能;

2、xml 文件必须与程序集同目录,且文件名:xxx.dll -> xxx.xml;

系列文章导航

  • (一)入门

  • (二)自动迁移实体

  • (三)实体特性

  • (四)实体特性 Fluent Api

  • (五)插入数据

  • (六)批量插入数据

  • (七)插入数据时忽略列

  • (八)插入数据时指定列

  • (九)删除数据

  • (十)更新数据

  • (十一)更新数据 Where

  • (十二)更新数据时指定列

  • (十三)更新数据时忽略列

  • (十四)批量更新数据

  • (十五)查询数据

  • (十六)分页查询

  • (十七)联表查询

  • (十八)导航属性

  • (十九)多表查询

  • (二十)多表查询 WhereCascade

  • (二十一)查询返回数据

  • (二十二)Dto 映射查询

  • (二十三)分组、聚合

  • (二十四)Linq To Sql 语法使用介绍

  • (二十五)延时加载

  • (二十六)贪婪加载 Include、IncludeMany、Dto、ToList

  • (二十七)将已写好的 SQL 语句,与实体类映射进行二次查询

  • (二十八)事务

  • (二十九)Lambda 表达式

  • (三十)读写分离

  • (三十一)分区分表

  • (三十二)Aop

  • (三十三)CodeFirst 类型映射

  • (三十四)CodeFirst 迁移说明

  • (三十五)CodeFirst 自定义特性

转载于:https://www.cnblogs.com/FreeSql/p/11531302.html

FreeSql (三)实体特性相关推荐

  1. FreeSql (四)实体特性 Fluent Api

    FreeSql 提供使用 Fluent Api, 在外部配置实体的数据库特性,Fluent Api 的方法命名与特性名保持一致,如下: fsql.CodeFirst.ConfigEntity<T ...

  2. php开发面试题---php面向对象详解(对象的主要三个特性)

    php开发面试题---php面向对象详解(对象的主要三个特性) 一.总结 一句话总结: 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为. 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸 ...

  3. css的三个特性 背景透明设置

    关于行内元素(补充一点) 行内元素只能容纳文本或其他行内元素.(a特殊a里面可以放块级元素) 例子: 关于行高tip: 选择器的嵌套层级不应大于3级,位置靠后的限定条件应尽可能的精确. 属性定义必须另 ...

  4. CSS 的三个特性:层叠性、继承性、优先级

    层叠性 CSS 有三个非常重要的三个特性:层叠性.继承性.优先级. 相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式.层叠性主要解决样式冲突 的问题 层叠性原则:  样式冲突 ...

  5. 人对光波的三种特性_光线的三种特性——玩转光线的基础知识

    摄影是用光的技术,想用好光线就必须了解光线的特性. 光线的三个特性就是: 1.强度.光的强度与光源的能量距离以及传播介质有关.直观的感觉就是光的明暗程度. 2.方向.就是光源的方向.但是在多光源或者漫 ...

  6. DDR4实战教学(三):特性与电气参数

    微信搜索[每日硬知识],关注本公众号.网站访问链接:http://www.firesu.net. 好久未更,后续将陆续收尾DDR4博文系列.为大家带来DDR4的特性,DDR4的重要信号描述,DDR4的 ...

  7. 北京VI设计公司论VI设计的三个特性

    北京VI设计公司论VI设计的三个特性 编辑:AGO(安可)品牌顾问 特性1:识别性 企业的VI设计应该让企业形象具有识别性,识别性是企业VI设计的重要功能之一.由于市场竞争不断加剧,各种VI商标符号更 ...

  8. 分布式CAP定理,为什么不能同时满足三个特性?

    在弄清楚这个问题之前,我们先了解一下什么是分布式的CAP定理. 根据百度百科的定义,CAP定理又称CAP原则,指的是在一个分布式系统中,Consistency(一致性). Availability(可 ...

  9. 面向对象编程三种特性

    文章目录 面向过程 面向过程特点 面向对象 面向对象特点 对象和类 定义类 类创建对象 封装特性 封装的特性 继承特性 多继承 新式类与经典类 私有属性与私有方法 私有属性和私有方法: 多态 多态特点 ...

最新文章

  1. asyncio.Protocol socket 断线重连
  2. python入门教程 官方-Python自学入门?
  3. 计算机外观类型,知道你的笔记本电脑是什么类型的吗?五大类型派对号入座
  4. idea JDK安装与配置
  5. php usort的用法,PHP usort()用法及代码示例
  6. Linux 命令行提示符路径显示
  7. 在Vista系统中,Flash渲染功能无法使用,咋办?
  8. Ubuntu 18.04 64位安装校园网客户端(完美解决)
  9. Keil MDK5解决error: L6002U: Could not open file …\obj\main.o: No such file or directory
  10. 酒店管理系统——界面设计
  11. 【CSS】对话框--禁止弹框/对话框蒙层下方内容滚动
  12. 【日语口语词典学习】第0002页
  13. 已是操作系统的一部分_什么是操作系统 第2部分
  14. jmeter 导入java,JMeter导入自定义的Jar包的详解教程
  15. Linux部署禅道在访问web页面进入www时报错:mysql无法连接(重新解压安装包或者输入命令:setenforce 0即可)
  16. unity 转盘记录
  17. CRM 窗体定制技巧和代码
  18. 网络安全职业规划(笔记)
  19. 哪有什么高效安全运行,只不过是磁盘之间在负重前行 Linux RAID磁盘阵列
  20. 防勒索病毒的核心——主机加固

热门文章

  1. java环境_配置java环境变量
  2. 【Python CheckiO 题解】Popular Words
  3. PWN-PRACTICE-BUUCTF-24
  4. PWN-PRACTICE-BUUCTF-8
  5. 【HDU - 2087】 剪花布条(直接模拟 or KMP)
  6. 11.深度学习练习:Keras tutorial - the Happy House(推荐)
  7. 4)机器学习基石笔记 Lecture4:Feasibility of Learning
  8. 在计算机应用中mis,在计算机的应用中,“MIS”表示
  9. raft算法mysql主从复制_Etcd raft算法实现原理分析
  10. Linux | 进程概念、进程状态(僵尸进程、孤儿进程、守护进程)、进程地址空间