因此,我不必编写不同的方法来插入每个不同的派生审计类型。该方法采用基类型,但不起作用,它抛出一个
SQLTypeException
表示日期超出范围,尽管使用
DateTime.Now
. 我写了一些基本的调试代码,发现了一个奇怪的效果。以下代码可以正常工作:
tOnHoldReasonAudit dbAudit = new tOnHoldReasonAudit();
dbAudit.ApplicationID = 1;
dbAudit.Date = DateTime.Now;
dbAudit.UserID = 9;
pi_DataContext.tApplicationAudits.InsertOnSubmit(dbAudit);
pi_DataContext.SubmitChanges();
但是如果我把第一行改成
tApplicationAudit dbAudit = new tOnHoldReasonAudit();
哪里
tApplicationAudit
System.Data.SqlTypes.SqlTypeException: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
为什么这不起作用,这里到底发生了什么。在我的实时代码中,我有一个方法
AddAudit(tApplicationAudit Audit)
这就完成了实际工作,我不想为每个不同的派生类型编写add方法,因为这样会破坏整个对象,如果必须这样做,我还可以去掉派生的审计类型,只在基类上设置type属性。
更新:
[Table(Name="dbo.tApplicationAudit")]
[InheritanceMapping(Code="1", Type=typeof(tOnHoldReasonAudit), IsDefault=true)]
public partial class tApplicationAudit : INotifyPropertyChanging,INotifyPropertyChanged
public partial class tOnHoldReasonAudit : tApplicationAudit