From abdaf40eee4b3850a75b9a4c04f3c3ca6ae9ffaf Mon Sep 17 00:00:00 2001
From: 2881099 <2881099@users.noreply.github.com>
Date: Mon, 19 Aug 2024 15:12:12 +0800
Subject: [PATCH] =?UTF-8?q?Updated=20=E7=B1=BB=E5=9E=8B=E6=98=A0=E5=B0=84?=
=?UTF-8?q?=20(markdown)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
类型映射.md | 275 +++++++++++++++++++++++-----------------------------
1 file changed, 124 insertions(+), 151 deletions(-)
diff --git a/类型映射.md b/类型映射.md
index eb2ef24..cb4e7ab 100644
--- a/类型映射.md
+++ b/类型映射.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
().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
}
```
-### 使用 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\ \| 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 |
-| 数组 | 以上所有类型都支持,包括默认类型 |
+| 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 |
+| 数组 | 以上所有类型都支持,包括默认类型 |
-## 自定义重写(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)
\ No newline at end of file