在设计数据库时使用了数据库默认字段的方法,设置了默认值
create table EAS.T_userLevel ( UL_ID INTEGER not null, UL_userLevel2 INTEGER default 0 not null, UL_userLevelTime2 DATE default sysdate not null );
,但插入数据库的数据显示如下:
第一个字段UL_userLevel2生成的数据默认值是0,没有问题,但第二个字段UL_userLevelTime2默认值却是1-01-01 00:00:00很奇怪,
想了很长时间才发现原来是因为我使用ORM映射,不允许字段为空,导致系统给字段设置了默认值,导致数据库的默认值被覆盖了。
public class UserLevel : EasActiveRecordCRUDEx<UserLevel> { [PrimaryKey(PrimaryKeyType.Sequence, "UL_ID", SequenceName = "EAS.Seq_userLevel")] public int UL_ID { get; set; } /// <summary> /// 员工 /// </summary> [Property] public int UL_user_FK { get; set; } /// <summary> /// 等级 /// </summary> [Property] public int UL_userLevel2 { get; set; } /// <summary> /// 绩效等级 /// </summary> [Property] public string UL_userLevel2A { get; set; } /// <summary> /// UL_userLevel2 的评定时间 /// </summary> [Property] public DateTime UL_userLevelTime2 { get; set; } }
如果如下就可以使用数据库的默认值了
public DateTime? UL_userLevelTime2 { get; set; }
看来最安全的默认值方法还是构造函数
public UserLevel() { this.UL_userLevelTime2 = DateTime.Now; }
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/6685.html