Skip to content

类型映射

28810 edited this page Mar 4, 2020 · 35 revisions

自定义类型映射(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
{
    [Column(IsPrimary = true)]
    public string Name { get; set; }

    [JsonMap]
    public TestConfig Config { get; set; }
}

默认类型映射

csharp MySql SqlServer PostgreSQL Oracle Sqlite 达梦
bool | bool? bit(1) bit bool number(1) boolean number(1)
sbyte | sbyte? tinyint(3) smallint int2 number(4) smallint number(4)
short | short? smallint(6) smallint int2 number(6) smallint number(6)
int | int? int(11) int int4 number(11) integer number(11)
long | long? bigint(20) bigint int8 number(21) integer number(21)
byte | byte? tinyint(3) unsigned tinyint int2 number(3) int2 number(3)
ushort | ushort? smallint(5) unsigned int int4 number(5) unsigned number(5)
uint | uint? int(10) unsigned bigint int8 number(10) decimal(10,0) number(10)
ulong | ulong? bigint(20) unsigned decimal(20,0) numeric(20,0) number(20) decimal(21,0) number(20)
double | double? double float float8 float(126) double double
float | float? float real float4 float(63) float real
decimal | decimal? decimal(10,2) decimal(10,2) numeric(10,2) number(10,2) decimal(10,2) number(10,2)
Guid | Guid? char(36) uniqueidentifier uuid char(36 CHAR) character(36) char(36)
TimeSpan | TimeSpan? time time time interval day(2) to second(6) bigint -
DateTime | DateTime? datetime datetime timestamp timestamp(6) datetime timestamp(6)
DateTimeOffset | DateTimeOffset? - datetimeoffset - timestamp(6) with local time zone - timestamp(6)
Enum | Enum? enum int int4 number(16) mediumint number(16)
FlagsEnum | FlagsEnum? set bigint int8 number(32) bigint number(32)
byte[] varbinary(255) varbinary(255) bytea blob blob blob
string varchar(255) nvarchar(255) varchar(255) nvarchar2(255) nvarchar(255) nvarchar2(255)

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

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

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

MySql 特别类型映射

csharp MySql
MygisPoint point
MygisLineString linestring
MygisPolygon polygon
MygisMultiPoint multipoint
MygisMultiLineString multilinestring
MygisMultiPolygon multipolygon

PostgreSQL 特别类型映射

csharp PostgreSQL
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
数组 以上所有类型都支持,包括默认类型

优先级

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

参考资料

Clone this wiki locally