类型映射

自定义类型映射(MapType)

  1. class EnumTestMap {
  2. public Guid id { get; set; }
  3. [Column(MapType = typeof(string))]
  4. public ToStringMapEnum enum_to_string { get; set; }
  5. [Column(MapType = typeof(string))]
  6. public ToStringMapEnum? enumnullable_to_string { get; set; }
  7. [Column(MapType = typeof(int))]
  8. public ToStringMapEnum enum_to_int { get; set; }
  9. [Column(MapType = typeof(int?))]
  10. public ToStringMapEnum? enumnullable_to_int { get; set; }
  11. [Column(MapType = typeof(string))]
  12. public BigInteger biginteger_to_string { get; set; }
  13. [Column(MapType = typeof(string))]
  14. public BigInteger? bigintegernullable_to_string { get; set; }
  15. }
  16. public enum ToStringMapEnum { 中国人, abc, 香港 }

应该不需要解释了吧?

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

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

dotnet add package FreeSql.Extensions.JsonMap

  1. fsql.UseJsonMap(); //开启功能
  2. class TestConfig {
  3. public int clicks { get; set; }
  4. public string title { get; set; }
  5. }
  6. [Table(Name = "sysconfig")]
  7. public class S_SysConfig {
  8. [Column(IsPrimary = true)]
  9. public string Name { get; set; }
  10. [JsonMap]
  11. public TestConfig Config { get; set; }
  12. }

默认类型映射

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 Firebird MsAccess 达梦 金仓 神通
text text varchar(max) nclob text blob sub_type 1 longtext text text text

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

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

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

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\ \ NpgsqlRange\? int4range
NpgsqlRange\ \ NpgsqlRange\? int8range
NpgsqlRange\ \ NpgsqlRange\? numrange
NpgsqlRange\ \ NpgsqlRange\? tsrange
PostgisPoint geometry
PostgisLineString geometry
PostgisPolygon geometry
PostgisMultiPoint geometry
PostgisMultiLineString geometry
PostgisMultiPolygon geometry
PostgisGeometry geometry
PostgisGeometryCollection geometry
Dictionary\ hstore
JToken jsonb
JObject jsonb
JArray jsonb
数组 以上所有类型都支持,包括默认类型

优先级

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