dotnetcore / FreeSql

🦄 .NET aot orm, C# orm, VB.NET orm, Mysql orm, Postgresql orm, SqlServer orm, Oracle orm, Sqlite orm, Firebird orm, 达梦 orm, 人大金仓 orm, 神通 orm, 翰高 orm, 南大通用 orm, 虚谷 orm, 国产 orm, Clickhouse orm, DuckDB orm, TDengine orm, QuestDB orm, MsAccess orm.
https://dotnetcore.github.io/FreeSql/
MIT License
4.11k stars 858 forks source link

JSON类型不同数据库映射到实体的类型能不能统一 #1240

Closed yus1977 closed 2 years ago

yus1977 commented 2 years ago

Feature 特性

简要描述原因

JSON类型不同数据库映射到实体的类型能不能统一

使用场景

不同数据库定义的JSON类型,映射成实体代码后的数据类型不统一 MySQL,SQLServer都统一映射成了 string类型 PostgreSQL映射了 JToken 类型 这导致同一个代码,切换支持的数据库后,可能不能继续使用,必须 进行修改 如果统一都映射成一个数据类型,这样切换数据库类型后,业务代码也可以平滑切换

hd2y commented 2 years ago

不是所有数据库都支持 json,建议可以直接定义成 string,或者定义成 json 对应的 DTO,然后使用 JsonMap 功能,这样数据库里统一是 text,但是会 CRUD 时会自动的序列化与反序列化。

yus1977 commented 2 years ago

如果数据库里统一是 text,实体上是通用了, 但不知是否还能使用数据库的JSON特性了,这个需要验证一下 比如: 1、使用JSON的属性作索引(MYSQL、SQLSever、PostgreSQL都支持), 2、JSON数组索引(mysql支持,PostgreSQL没有验证过) 3、使用sql从JSON 文本里提取数据,

2881099 commented 2 years ago

所谓数据库特性,一般指查询,可以用自定义函数解析式解决。

hd2y commented 2 years ago

可以先看下 CodeFirst 中的自定义特性一节,自己适配一个支持为不同数据库指定 DbType 的特性来用。

yus1977 commented 2 years ago

CodeFirst可以试试看 目前是DBFirst方式为主,实体都是生成工具生成的,生成工具是这样映射的 我先改一下模板试试看

2881099 commented 2 years ago

attribute aop fluentapi 可以设置优先级

请看实体特性文档