使用FreeSQL走过的坑

  FreeSQL还挺好用的,后续的新项目,用到数据库的,基本上都改用FreeSQL了。但是在FreeSQL的过程中,不可避免地踩过一些坑,分享出来供大家参考。

  1、慎用UseAutoSyncStructure(true)功能,特别是一些老项目改造,和数据非常重要的项目。

  UseAutoSyncStructure功能非常方便,FreeSQL会根据定义的数据类,自动生成数据库表和数据库字段。但使用不当,可能会造成数据丢失。

  我之前踩过的坑是改成自己写的日志软件时遇到的,因为我的日志内容部分比较长,所有原来用的数据库字段类型是LongText,代码中数据类的字段类型是string。改造过程没去特别定义字段长度。出现的结果是,在MySQL数据库中,FreeSQL默认会把数据类型是string的字段,定义成类似长度256的varchar类型。然后FreeSQL把我原来的LongText类型直接改成了varchar(256),把原来日志内容超出的部分全删除了。相当于我前面写的所有的日志内容都只剩下256个字符了,欲哭无泪。

  解决办法:

  1)不要开启UseAutoSyncStructure自动迁移功能

freeSql = new FreeSql.FreeSqlBuilder()
    .UseConnectionString(type, connectionString)
    .UseLazyLoading(true)
    .UseMonitorCommand(cmd => Debug.WriteLine(cmd.CommandText))
    //.UseAutoSyncStructure(true)
    .Build();

  2)文本内容超长的字段,要定义一下字段长度,我一般直接把StringLength定义成-2,相当于就是LongText

[Column(IsNullable = false, StringLength = -2)]
public string TaskContent { get; set; }

 

  2、不同数据库切换时要小心。

  FreeSQL封装得比较好,可以非常方便地匹配不同的数据库类型,所以我现在的小工具基本上都会同地支持MySQL和SQLite,同时支持切换数据库。

  前面我弄的小工具ToDoManager,默认使用SQLite,但我平常都是使用MySQL。有一次,在调试过程中,在软件运行过程中,把数据库从SQLite切换到MySQL,但切换完以后没有从新数据库中重新加载数据。然后这个小工具,前面为了方便加了退出时自动保存的功能。导致的后果是,SQLite的空数据把MySQL里的有效数据全替换了,导致我MySQL里的数据基本上全丢了。

posted @ 2023-02-01 08:52  wzwyc  阅读(1814)  评论(3编辑  收藏  举报