【发布时间】:2012-02-08 13:21:16
【问题描述】:
我这样问这个问题是因为我可以想象有一个潜在的简单但 Devart 特定的解决方案,但对于任何类似情况也可能是一个非常通用的解决方案。
我正在使用 Devart LINQ To Oracle,通常您在设计时在 lqml 文件中创建一个类似 ItemX 的类,并指定它后面的表。然后,在运行时,您使用Table(Of ItemX) 来查询数据库。到目前为止一切顺利。
现在我有两个相同的表ItemX 和ItemY,我需要根据运行时标志从一个或另一个查询。除此之外,所有代码都是相同的,我想保持这种方式。但是,Table(Of ItemX) 是强类型的,因此我需要所有内容的重复版本,唯一的区别是数据类型。
因此,Devart 特定的解决方案是:拥有一个名为 Item 的项目类,但在运行时执行一些操作,以便 Devart DataContext 使用不同的后备表。然后所有代码都使用基本的Item 对象,但是当持久化到数据库和从数据库持久化时,它知道要使用哪个表。有没有办法做到这一点?
更通用的方法是挂接到 IQueryable 链中,以便它在内部使用 ItemX 和 ItemY 类,但在外部签名中将所有内容转换为基本 Item 类。我什至无法清楚地描述这个问题。有没有办法做到这一点?
【问题讨论】:
-
如果它们的内容在类型和含义上都可以互换,那为什么还要有两张表呢?
-
我要跟踪两种文档,每种类型的数据结构和逻辑都是相同的,但有时他们希望查看类型 X 的列表,有时希望查看类型 Y。你可以正在考虑应该有一个带有 DocumentType 列的表来保持文档类型分开,你可能是对的。但是,很久以前就这样做了,当时两个相似的系统合并了,现在以这种方式重整会非常非常混乱。
标签: .net clr iqueryable devart