0

设想

我正在为我的最新项目使用 SubSonic。首先要做的事;这个项目仅限于使用 .net 3.0 并且 SubSonic 非常棒。我喜欢它。

但是,我在自定义方面遇到了一些麻烦。客户要求我们使用两个 SQL Server 2005 数据库,其中一个将复制另一个,减去一些列。

乍一看,这似乎很简单。但是,SubSonic 默认抓取所有列,导致 SQLExceptions。我想优雅地逐个表地限制选择列表。

例如,下面的代码可以解决问题,但我宁愿每次新查询时都不需要这样做:

Query q = Post.Query().WHERE(Post.Columns.PageId, page_id);
if(UsingReplicatedDB)
    q.SetSelectList(ReplicatedPostColumnList);
return q.ExecuteReader();

问题

上述方法使我的代码膨胀,并且不适用于FetchByXSubSonic 生成的内置方法。有没有办法在一个表格的基础上优雅地设置默认的 SelectList ?

笔记

我曾尝试在运行时在我的部分类中从模式中删除列,但是看起来像ColNameColumn在集合中查找特定索引的列,Columns所以我的计划被挫败了。

我知道我知道

请不要“你是个白痴,你为什么要这样做?” 答案。我知道很可能有更好的方法,这似乎有点老套,但这就是我要说的。我需要一个不纠缠的解决方案。

4

3 回答 3

2

我不认为有一个简单的方法可以让这个工作。您可以创建两个指向每个 DB 的 SubSonic 提供程序,然后根据情况,使用 SubSonic 对象来填充单独的模型。但是 SubSonic 并不能按照您想要的方式工作,因为它与 db 架构紧密相关。

于 2009-03-23T03:03:13.943 回答
0

你在这里确实有一个非常棘手的情况。即使您确实找到了一种方法来让您的查询根据您使用的数据库版本来获取列,您现在也必须弄清楚您在业务模型或 UI 中的任何地方都在使用哪个数据库,这样您就不会引用哪些列不存在。

我建议使用两个 SubSonic 提供程序,然后让 Generated 类各自实现一个接口,该接口包含两个类共有的列的属性以及您计划用于与数据库交互的 Subsonic 方法,例如 Save( );.

有时,当您想自定义某些东西以使其按您希望的方式工作时,您需要编写一些自定义代码:)

于 2009-04-13T14:24:04.773 回答
0

如果您愿意使用 3.0(即将发布),我很乐意与您合作解决一些 TT 模板修复程序,这些修复程序可以做到这一点(忽略 rep 列)。用我的名字在 gmail 上联系我——我一直想这样做 :)。

3.0 还允许您使用 Linq 和我们的 neq 查询工具 - 但我想确保它不会破坏您正在做的事情。

于 2009-04-13T18:50:16.847 回答