美文网首页
FreeSql 教程 (三十三)CodeFirst 类型映射

FreeSql 教程 (三十三)CodeFirst 类型映射

作者: 叶先生_34e6 | 来源:发表于2020-03-18 11:10 被阅读0次

    FreeSql 以 MIT 开源协议托管于 github:https://github.com/2881099/FreeSql

    前面有介绍过几篇 CodeFirst 内容文章,有

    入门 FreeSql 前这些算是基础教程,需要提前了解,接下来进入 CodeFirst 功能的深入了解。

    类型映射是 ORM 最重要的功能之一,FreeSql 支持五大数据库大多数数据库类型,包括 mysql 的 enum/set,pgsql 的 hstore/jsonb 等等。。除此默认之外,还提供了自定义类型映射。

    类型映射,需要考虑写入(我们的写入需要考虑 NoneParameter 和 Parameter)、读取时的转换工作,这部分扩展对个人使用者而言比较复杂,如有需要请提出您的 issues。

    FreeSql 拥有较高容错处理,如:当数据库类型为 bigint 可空,实体类为 int 时,读取数据不会出错。

    自定义类型映射(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 == 判断可以使用,无法实现 + - * / 等操作;

    FreeSql.Extensions.JsonMap

    上面的 MapType 只能处理有限的类型,JsonMap 是一个扩展包,实现属性对象映射为 varchar 字段,写入时使用 json.net 序列化,读取时使用 json.net 反序列化。

    安装扩展包:

    dotnet add package FreeSql.Extensions.JsonMap

    fsql.UseJsonMap(); //开启功能, fsql 为 IFreeSql 对象
    
    class TestConfig
    {
        public int clicks { get; set; }
        public string title { get; set; }
    }
    [Table(Name = "sysconfig")]
    public class S_SysConfig<T>
    {
        [Column(IsPrimary = true)]
        public string Name { get; set; }
    
        [JsonMap]
        public T Config { get; set; }
    }
    

    默认类型映射

    csharp MySql SqlServer PostgreSQL Oracle Sqlite
    bool | bool? bit(1) bit bool number(1) boolean
    sbyte | sbyte? tinyint(3) smallint int2 number(4) smallint
    short | short? smallint(6) smallint int2 number(6) smallint
    int | int? int(11) int int4 number(11) integer
    long | long? bigint(20) bigint int8 number(21) integer
    byte | byte? tinyint(3) unsigned tinyint int2 number(3) int2
    ushort | ushort? smallint(5) unsigned int int4 number(5) unsigned
    uint | uint? int(10) unsigned bigint int8 number(10) decimal(10,0)
    ulong | ulong? bigint(20) unsigned decimal(20,0) numeric(20,0) number(20) decimal(21,0)
    double | double? double float float8 float(126) double
    float | float? float real float4 float(63) float
    decimal | decimal? decimal(10,2) decimal(10,2) numeric(10,2) number(10,2) decimal(10,2)
    Guid | Guid? char(36) uniqueidentifier uuid char(36 CHAR) character(36)
    TimeSpan | TimeSpan? time time time interval day(2) to second(6) bigint
    DateTime | DateTime? datetime datetime timestamp timestamp(6) datetime
    DateTimeOffset | DateTimeOffset? - - datetimeoffset timestamp(6) with local time zone -
    Enum | Enum? enum int int4 number(16) mediumint
    FlagsEnum | FlagsEnum? set bigint int8 number(32) bigint
    byte[] varbinary(255) varbinary(255) bytea blob blob
    string varchar(255) nvarchar(255) varchar(255) nvarchar2(255) nvarchar(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)] 或者 [Column(StringLength = -1)],当长度 -1 时产生的映射如下:

    MySql PostgreSQL SqlServer Oracle Sqlite MsAccess
    text text varchar(max) nvarchar2(4000) text longtext

    系列文章导航

    相关文章

      网友评论

          本文标题:FreeSql 教程 (三十三)CodeFirst 类型映射

          本文链接:https://www.haomeiwen.com/subject/iijudhtx.html