使用FreeSql.Generator对SqlServer数据库表生成的实体属性位置和表中不一致
FreeSql.Generator版本:3.2.665
表中显示顺序如下

但是生成的实体属性是按照字典顺序排的

生成模板中如果按照字段的Position来排序,显示顺序也不正常

查看了issues#1154,又看了下源代码,好像PgSql和Mysql是获取字段的ordinal_position之后根据ordinal_position来设置Position,而SqlServer是通过++position的方式来迭代position。

后面还有逻辑,顺序是:
主键 外键 名称排序
loc4.Primarys.Sort((c1, c2) => c1.Name.CompareTo(c2.Name));
loc4.Columns.Sort((c1, c2) =>
{
int compare = c2.IsPrimary.CompareTo(c1.IsPrimary);
if (compare == 0)
{
bool b1 = loc4.ForeignsDict.Values.Where(fk => fk.Columns.Where(c3 => c3.Name == c1.Name).Any()).Any();
bool b2 = loc4.ForeignsDict.Values.Where(fk => fk.Columns.Where(c3 => c3.Name == c2.Name).Any()).Any();
compare = b2.CompareTo(b1);
}
if (compare == 0) compare = c1.Name.CompareTo(c2.Name);
return compare;
});
希望不是用默认的排序,而是能通过Position排序之后生成模板,参照OdbcMySqlDbFirst.cs中取ordinal_position来设置Position,对SqlServerDbFirst.cs进行了下修改,取sys.columns中的column_id来作为Position,之后在模板文件中根据Postion把字段排序,可以获得想要的结果



谢谢,已测试 sqlserver 2005 通过
dotnet tool 新版本可以直接编译后安装:
编译前需要把 FreeSql.Generator 项目的版本号改大一点(比当前已安装的要大)
> cd C:\Users\28810\Desktop\github\FreeSql\Extensions\FreeSql.Generator\bin\Debug
> dotnet tool update -g FreeSql.Generator --add-source ./
如果不方便编译,可以下载我临时编译的版本 3.2.665.1,只编译了net6,不然文件太大无法上传