类型映射

自定义类型映射(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, 香港 }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

应该不需要解释了吧?

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 {
    [Column(IsPrimary = true)]
    public string Name { get; set; }

    [JsonMap]
    public TestConfig Config { get; set; }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

默认类型映射

csharpMySqlSqlServerPostgreSQLOracleSqlite达梦
bool | bool?bit(1)bitboolnumber(1)booleannumber(1)
sbyte | sbyte?tinyint(3)smallintint2number(4)smallintnumber(4)
short | short?smallint(6)smallintint2number(6)smallintnumber(6)
int | int?int(11)intint4number(11)integernumber(11)
long | long?bigint(20)bigintint8number(21)integernumber(21)
byte | byte?tinyint(3) unsignedtinyintint2number(3)int2number(3)
ushort | ushort?smallint(5) unsignedintint4number(5)unsignednumber(5)
uint | uint?int(10) unsignedbigintint8number(10)decimal(10,0)number(10)
ulong | ulong?bigint(20) unsigneddecimal(20,0)numeric(20,0)number(20)decimal(21,0)number(20)
double | double?doublefloatfloat8float(126)doubledouble
float | float?floatrealfloat4float(63)floatreal
decimal | decimal?decimal(10,2)decimal(10,2)numeric(10,2)number(10,2)decimal(10,2)number(10,2)
Guid | Guid?char(36)uniqueidentifieruuidchar(36 CHAR)character(36)char(36)
TimeSpan | TimeSpan?timetimetimeinterval day(2) to second(6)bigint-
DateTime | DateTime?datetimedatetimetimestamptimestamp(6)datetimetimestamp(6)
DateTimeOffset | DateTimeOffset?-datetimeoffset-timestamp(6) with local time zone-timestamp(6)
Enum | Enum?enumintint4number(16)mediumintnumber(16)
FlagsEnum | FlagsEnum?setbigintint8number(32)bigintnumber(32)
byte[]varbinary(255)varbinary(255)byteablobblobblob
stringvarchar(255)nvarchar(255)varchar(255)nvarchar2(255)nvarchar(255)nvarchar2(255)

以上类型和长度是默认值,可手工设置 Column 特性 DbType 值

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

MySqlPostgreSQLSqlServerOracleSqliteFirebirdMsAccess达梦金仓神通
texttextvarchar(max)nclobtextblob sub_type 1longtexttexttexttext

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

注意:MySql [MaxLength(-2)] 或者 [Column(StringLength = -2)] 映射类型 longtext,其他数据库的映射规则与 -1 相同

decimal 指定长度 [Column(Precision = 10, Scale = 2)]

MySql 特别类型映射

csharpMySql
MygisPointpoint
MygisLineStringlinestring
MygisPolygonpolygon
MygisMultiPointmultipoint
MygisMultiLineStringmultilinestring
MygisMultiPolygonmultipolygon

PostgreSQL 特别类型映射

csharpPostgreSQL
BitArrayvarbit(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
IPAddressinet
PhysicalAddressmacaddr
NpgsqlRange<int> | NpgsqlRange<int>?int4range
NpgsqlRange<long> | NpgsqlRange<long>?int8range
NpgsqlRange<decimal> | NpgsqlRange<decimal>?numrange
NpgsqlRange<DateTime> | NpgsqlRange<DateTime>?tsrange
PostgisPointgeometry
PostgisLineStringgeometry
PostgisPolygongeometry
PostgisMultiPointgeometry
PostgisMultiLineStringgeometry
PostgisMultiPolygongeometry
PostgisGeometrygeometry
PostgisGeometryCollectiongeometry
Dictionary<string, string>hstore
JTokenjsonb
JObjectjsonb
JArrayjsonb
数组以上所有类型都支持,包括默认类型

优先级

从数据库导入特性 > 实体特性 > FluentApi > Aop