关于在insertable中生成插入SQL判断忽略字段时,仅根据字段名称进行辨别,导致继承类同名字段无法写入的问题反馈 返回
问题说明:
根据数据库生成实体对象时,一般只能生成与数据库数据类型直接对应的数据类型。比如mysql里面,Int字段对应生成C#里面的int。但实际上,该字段可能应该是bool或enum字段。
为解决上述问题,则将生成的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()方法中,除判断名称之外,增加判断其字段类型,二者均相同时才忽略生效。