代码之家  ›  专栏  ›  技术社区  ›  Coding Flow

LINQ到SQL单表继承性

  •  0
  • Coding Flow  · 技术社区  · 15 年前

    因此,我不必编写不同的方法来插入每个不同的派生审计类型。该方法采用基类型,但不起作用,它抛出一个 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
    
    1 回复  |  直到 15 年前
        1
  •  0
  •   Coding Flow    15 年前