前面有介绍过几篇 CodeFirst 内容文章,有

入门 FreeSql 前这些算是基础教程,需要提前了解,接下来进入 CodeFirst 功能的深入了解。

类型映射是 ORM 最重要的功能之一,FreeSql 支持各种数据库大多数类型,包括 mysql 的 enum/set,pgsql 的 hstore/jsonb 等等。。除此默认之外,还提供了自定义类型映射。

类型映射,需要考虑写入(我们的写入需要考虑 NoneParameter 和 Parameter)、读取时的转换工作,这部分扩展对个人使用者而言比较复杂,如有需要请提出您的 issues。

FreeSql 拥有较高容错处理,如:当数据库类型为 bigint 可空,实体类为 int 时,读取数据不会出错。

自定义类型映射(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 == 判断可以使用,无法实现 + - * / 等操作;

FreeSql.Extensions.JsonMap

上面的 MapType 只能处理有限的类型,JsonMap 是一个扩展包,实现属性对象映射为 varchar 字段,写入时使用 json.net 序列化,读取时使用 json.net 反序列化。

安装扩展包:

dotnet add package FreeSql.Extensions.JsonMap

fsql.UseJsonMap(); //开启功能, fsql 为 IFreeSql 对象

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; }
}

默认类型映射

csharp MySql SqlServer PostgreSQL Oracle Sqlite
bool | bool? bit(1) bit bool number(1) boolean
sbyte | sbyte? tinyint(3) smallint int2 number(4) smallint
short | short? smallint(6) smallint int2 number(6) smallint
int | int? int(11) int int4 number(11) integer
long | long? bigint(20) bigint int8 number(21) integer
byte | byte? tinyint(3) unsigned tinyint int2 number(3) int2
ushort | ushort? smallint(5) unsigned int int4 number(5) unsigned
uint | uint? int(10) unsigned bigint int8 number(10) decimal(10,0)
ulong | ulong? bigint(20) unsigned decimal(20,0) numeric(20,0) number(20) decimal(21,0)
double | double? double float float8 float(126) double
float | float? float real float4 float(63) float
decimal | decimal? decimal(10,2) decimal(10,2) numeric(10,2) number(10,2) decimal(10,2)
Guid | Guid? char(36) uniqueidentifier uuid char(36 CHAR) character(36)
TimeSpan | TimeSpan? time time time interval day(2) to second(6) bigint
DateTime | DateTime? datetime datetime timestamp timestamp(6) datetime
DateTimeOffset | DateTimeOffset? - - datetimeoffset timestamp(6) with local time zone -
Enum | Enum? enum int int4 number(16) mediumint
FlagsEnum | FlagsEnum? set bigint int8 number(32) bigint
byte[] varbinary(255) varbinary(255) bytea blob blob
string varchar(255) nvarchar(255) varchar(255) nvarchar2(255) nvarchar(255)
MygisPoint point - - - -
MygisLineString linestring - - - -
MygisPolygon polygon - - - -
MygisMultiPoint multipoint - - - -
MygisMultiLineString multilinestring - - - -
MygisMultiPolygon multipolygon - - - -
BitArray - - varbit(64) - -
NpgsqlPoint | NpgsqlPoint? - - point - -
NpgsqlLine | NpgsqlLine? - - line - -
NpgsqlLSeg | NpgsqlLSeg? - - lseg - -
NpgsqlBox | NpgsqlBox? - - box - -
NpgsqlPath | NpgsqlPath? - - path - -
NpgsqlPolygon | NpgsqlPolygon? - - polygon - -
NpgsqlCircle | NpgsqlCircle? - - circle - -
(IPAddress Address, int Subnet) | (IPAddress Address, int Subnet)? - - cidr - -
IPAddress - - inet - -
PhysicalAddress - - macaddr - -
NpgsqlRange<int> | NpgsqlRange<int>? - - int4range - -
NpgsqlRange<long> | NpgsqlRange<long>? - - int8range - -
NpgsqlRange<decimal> | NpgsqlRange<decimal>? - - numrange - -
NpgsqlRange<DateTime> | NpgsqlRange<DateTime>? - - tsrange - -
PostgisPoint - - geometry - -
PostgisLineString - - geometry - -
PostgisPolygon - - geometry - -
PostgisMultiPoint - - geometry - -
PostgisMultiLineString - - geometry - -
PostgisMultiPolygon - - geometry - -
PostgisGeometry - - geometry - -
PostgisGeometryCollection - - geometry - -
Dictionary<string, string> - - hstore - -
JToken - - jsonb - -
JObject - - jsonb - -
JArray - - jsonb - -
数组 - - 以上所有类型都支持 - -

string 指定长度 [Column(DbType = "varchar(max)")] 或者 [MaxLength(-1)] 或者 [Column(StringLength = -1)],当长度 -1 时产生的映射如下:

MySql PostgreSQL SqlServer Oracle Sqlite MsAccess
text text varchar(max) nclob text longtext

注意:Oracle nclob 需要 v1.3.2+ 版本才支持,否则将映射 nvarchar2(4000)

系列文章导航

最新文章

  1. Android之使用文件进行IPC
  2. Why AlloyFinger is so much smaller than hammerjs?
  3. MFC覆盖OnPrepareDC实现“所见即所得”打印
  4. java07课堂作业
  5. CentOS6设置密码过期时间
  6. 性能测试一般过程与LR性能测试过程
  7. Android签名机制:生成keystore、签名、查看签名信息
  8. Bootstrap页面布局8 - BS常用标签与样式
  9. Ibatis.Net 各种配置说明(二)
  10. POJ 1733 Parity game(离散化+带权并查集)
  11. eclipse中的输入提示怎么设置
  12. bios自检时间长,显示0075错误
  13. JavaScript正则表达式知识点
  14. SpringMVC之Http标准的头部信息
  15. Luogu3444:[POI2006]ORK-Ploughing
  16. Quartz实现分布式可动态配置的定时任务
  17. RabbitMQ in Action (2): Running and administering Rabbit
  18. [LeetCode] 6. Z 字形变换
  19. c/c++ 模板与STL小例子系列&lt;一 &gt;自建Array数组
  20. 20135316Linux内核学习笔记第八周

热门文章

  1. 5月29日 Java性能调优指南 读后感
  2. pikachu
  3. asp.net core 从单机到集群
  4. linux下实现并发逻辑
  5. C#_会员管理系统
  6. c# 读取 txt 文件中数据(int)
  7. hive explode 行拆列
  8. 调度系统Airflow1.10.4调研与介绍和docker安装
  9. Docker搭建Zookeeper&amp;Kafka集群
  10. python 20 规范化目录