mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-16 21:30:57 +08:00
Updated 类型映射 (markdown)
275
类型映射.md
275
类型映射.md
@@ -1,18 +1,96 @@
|
||||
## 自定义类型映射(MapType)
|
||||
## 类型映射(默认)
|
||||
|
||||
### v3.2.701 版本自定义类型转换
|
||||
> 提示:因排版问题,不显示所有支持的数据库
|
||||
|
||||
| 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) |
|
||||
|
||||
> string 指定长度 [Column(DbType = "varchar(max)")] 或者 [MaxLength(-1)] 或者 [Column(StringLength = -1)],当长度 -1 时产生的映射如下:
|
||||
|
||||
| MySql | PostgreSQL | SqlServer | Oracle | Sqlite | Firebird | DuckDB | MsAccess | 达梦 | 金仓 |
|
||||
| ----- | ---------- | ------------ | ------ | ------ | --------------- | -------- | -------- | ---- | ---- |
|
||||
| text | text | varchar(max) | nclob | text | blob sub_type 1 | text | longtext | text | text |
|
||||
|
||||
> 注意:MySql [MaxLength(-2)] 或者 [Column(StringLength = -2)] 映射类型 longtext
|
||||
|
||||
> decimal 指定长度 [Column(Precision = 10, Scale = 2)]
|
||||
|
||||
## MapType
|
||||
|
||||
使用 MapType 枚举 -> string/int 等等如下:
|
||||
|
||||
```csharp
|
||||
class Table
|
||||
{
|
||||
public int id { get; set; }
|
||||
|
||||
[Column(MapType = typeof(string))]
|
||||
public PeopleType t1 { get; set; }
|
||||
|
||||
[Column(MapType = typeof(int))]
|
||||
public PeopleType t2 { get; set; }
|
||||
|
||||
[Column(MapType = typeof(string))]
|
||||
public BigInteger t3 { get; set; }
|
||||
}
|
||||
public enum PeopleType { 中国人, abc, 香港 }
|
||||
```
|
||||
|
||||
## Json
|
||||
|
||||
> dotnet add package FreeSql.Extensions.JsonMap
|
||||
|
||||
```csharp
|
||||
fsql.UseJsonMap(); //开启功能
|
||||
|
||||
class Table
|
||||
{
|
||||
public int Id { get; set; }
|
||||
|
||||
[JsonMap, Column(DbType = "json")]
|
||||
public TableOptions Options { get; set; }
|
||||
}
|
||||
class TableOptions
|
||||
{
|
||||
public int Value1 { get; set; }
|
||||
public string Value2 { get; set; }
|
||||
}
|
||||
|
||||
fsql.Select<Table>().Where(a => a.Options.Value1 == 100 && a.Options.Value2 == "xx").ToList();
|
||||
//WHERE json_extract(a."Options",'$.Value1') = 100 AND json_extract(a."Options",'$.Value2') = 'xx'
|
||||
```
|
||||
|
||||
## TypeHandlers(自定义)
|
||||
|
||||
```csharp
|
||||
FreeSql.Internal.Utils.TypeHandlers.TryAdd(typeof(JsonClass), new String_JsonClass());
|
||||
|
||||
|
||||
class Product
|
||||
{
|
||||
public Guid id { get; set; }
|
||||
[Column(MapType = typeof(string), StringLength = -1)]
|
||||
public JsonClass json { get; set; }
|
||||
}
|
||||
|
||||
class JsonClass
|
||||
{
|
||||
public int a { get; set; }
|
||||
@@ -49,142 +127,55 @@ class DateTimeOffsetTypeHandler : TypeHandler<DateTimeOffset>
|
||||
}
|
||||
```
|
||||
|
||||
### 使用 MapType 枚举 -> string/int 等等如下:
|
||||
## 类型映射(特别)
|
||||
|
||||
```csharp
|
||||
class EnumTestMap {
|
||||
public Guid id { get; set; }
|
||||
FreeSql.Provider.MySql/MySqlConnector:
|
||||
|
||||
[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
|
||||
|
||||
```csharp
|
||||
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 | Firebird | MsAccess | 达梦 | 金仓 | 神通 | 南大 |
|
||||
| - | - | - | - | - | - | - | - | - | - | - |
|
||||
| text | text | nvarchar(max) | nclob | text | blob sub_type 1 | longtext | text | 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 |
|
||||
| csharp | MySql |
|
||||
| -------------------- | --------------- |
|
||||
| MygisPoint | point |
|
||||
| MygisLineString | linestring |
|
||||
| MygisPolygon | polygon |
|
||||
| MygisMultiPoint | multipoint |
|
||||
| MygisMultiLineString | multilinestring |
|
||||
| MygisMultiPolygon | multipolygon |
|
||||
| MygisMultiPolygon | multipolygon |
|
||||
|
||||
## Mysql注意事项
|
||||
如果``int、byte``类型,指定了 ``DbType="tinyint(1)"``,请注意,``tinyint(1)``在ado.net中默认将此值映射为``bool``类型,可在链接串中指定``TreatTinyAsBoolean=false``,使映射 ``tinyint(1) ``为 ``SByte`` 而非 ``bool``。
|
||||
> MySql 如果 ``int、byte``类型,指定了 ``DbType="tinyint(1)"``,请注意,``tinyint(1)``在ado.net中默认将此值映射为``bool``类型,可在链接串中指定``TreatTinyAsBoolean=false``,使映射 ``tinyint(1) ``为 ``SByte`` 而非 ``bool``。
|
||||
|
||||
## PostgreSQL 特别类型映射
|
||||
FreeSql.Provider.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 |
|
||||
| 数组 | 以上所有类型都支持,包括默认类型 |
|
||||
| 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 |
|
||||
| 数组 | 以上所有类型都支持,包括默认类型 |
|
||||
|
||||
## 自定义重写(RewriteSql)、重读(RereadSql)
|
||||
## 重写、重读
|
||||
|
||||
写入时重写 SQL、读取时重写 SQL,适合 geography 类型的读写场景。
|
||||
|
||||
@@ -202,21 +193,3 @@ public string geo { get; set; }
|
||||
//FROM [ts_geocrud01] a
|
||||
//WHERE (a.[id] = 'c7227d5e-0bcf-4b71-8f0f-d69a552fe84e')
|
||||
```
|
||||
|
||||
## 优先级
|
||||
|
||||
从数据库导入特性 > 实体特性 > FluentApi > Aop
|
||||
|
||||
## 参考资料
|
||||
|
||||
- [《实体特性说明》](%e5%ae%9e%e4%bd%93%e7%89%b9%e6%80%a7)
|
||||
|
||||
- [《FluentApi,享受纯净实体类》](FluentApi)
|
||||
|
||||
- [《导入数据库特性,懒人专利》](%e5%af%bc%e5%85%a5%e6%95%b0%e6%8d%ae%e5%ba%93%e7%89%b9%e6%80%a7)
|
||||
|
||||
- [《Aop自定义特性,与其他 ORM 共用特性》](%e8%87%aa%e5%ae%9a%e4%b9%89%e7%89%b9%e6%80%a7)
|
||||
|
||||
- [《导航关系配置》](%e5%ae%9e%e4%bd%93%e5%85%b3%e7%b3%bb)
|
||||
|
||||
- [《CodeFirst模式开发介绍》](CodeFirst)
|
||||
Reference in New Issue
Block a user