首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ to SQL单表继承

LINQ to SQL单表继承
EN

Stack Overflow用户
提问于 2010-06-16 21:56:42
回答 1查看 297关注 0票数 0

我使用LINQ to SQL对审计日志进行单表继承。有一个名为Type的字段/属性,我正在使用它作为判别符,我已经创建了一个基类型和一个继承类型(如果我可以实际使用它,稍后会有更多)。

这样我就不必编写不同的方法来插入每个不同的派生审计类型该方法采用基类型,但它不起作用,它抛出一个SQLTypeException,指出日期超出范围,尽管唯一的日期字段是使用DateTime.Now设置的。我写了一些基本的调试代码,发现了一个奇怪的效果。下面的代码运行良好:

代码语言:javascript
复制
tOnHoldReasonAudit dbAudit = new tOnHoldReasonAudit();
dbAudit.ApplicationID = 1;
dbAudit.Date = DateTime.Now;
dbAudit.UserID = 9;
pi_DataContext.tApplicationAudits.InsertOnSubmit(dbAudit);
pi_DataContext.SubmitChanges();

但是,如果我将第一行改为

代码语言:javascript
复制
tApplicationAudit dbAudit = new tOnHoldReasonAudit();

其中tApplicationAudit是抛出异常的基类型,具体地说:

代码语言:javascript
复制
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方法,因为这会破坏整个对象,如果我必须这样做,我还不如去掉派生的审计类型,只在基类上设置类型属性。

更新:

下面是由O/R designer创建的LinqTSql审计类型类定义的初始部分:

代码语言:javascript
复制
[Table(Name="dbo.tApplicationAudit")]
[InheritanceMapping(Code="1", Type=typeof(tOnHoldReasonAudit), IsDefault=true)]
public partial class tApplicationAudit : INotifyPropertyChanging,INotifyPropertyChanged

public partial class tOnHoldReasonAudit : tApplicationAudit
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-16 22:34:15

我想通了。这是因为派生类型上的属性只是隐藏了基类型上的对应属性。当我将基类型上的属性更改为virtual,并将派生类型上的重写更改为virtual时,它修复了它。我认为linq to sql一定是将其转换回派生类型以访问数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3053878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档