关于在insertable中生成插入SQL判断忽略字段时,仅根据字段名称进行辨别,导致继承类同名字段无法写入的问题反馈 返回

C#论坛 老数据
1 1797

问题说明:

  1. 根据数据库生成实体对象时,一般只能生成与数据库数据类型直接对应的数据类型。比如mysql里面,Int字段对应生成C#里面的int。但实际上,该字段可能应该是bool或enum字段。

  2. 为解决上述问题,则将生成的Model作为abstract基类,同时再写一个继承类,对需要调整的字段重新设置其数据类型,如下:

基类

public abstract class xxbase

{

    [SugarColumn(ColumnName = "abc1", ColumnDataType = "int", IsIgnore = false)]

    public int abc1{get;set;}

}

继承类:

public class xxx:xxbase

{

    [SugarColumn(IsIgnore = true)]

    public new bool abc1{get;set;}

}

3.完成上述实现后,发现,在插入数据时,无法正确写入;表现的情况是继承类明确忽略的字段没有被写入到表中(生成sql时,继承类忽略的字段不会生成在sql中)。

4.检查SqlSugar源代码时,发现在PreToSql()方法中,对于忽略字段有再次进行判断,判断的依据是忽略的字段名称。

5.显然,由于有继承类的存在,虽然字段类型变化了,但字段名称相同,于是判断其不进行写入。


建议:

在IgnoreColumn对象中,增加一个DataType的属性,当字段标识为忽略属性时,除记录其EntityName/PropertyName时,另行记录需忽略字段的DataType属性;同时,在PreToSql()方法中,除判断名称之外,增加判断其字段类型,二者均相同时才忽略生效。

热忱回答1