Skip to content

类型映射

28810 edited this page Dec 9, 2019 · 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)
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)]

优先级

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

参考资料

Clone this wiki locally