代码之家  ›  专栏  ›  技术社区  ›  brad

亚音速动态模式:selectList

  •  0
  • brad  · 技术社区  · 15 年前

    脚本

    我在用亚音速做我的最新项目。首先,这个项目被限制在使用.NET3.0,亚音速已经很棒了。我喜欢它。

    但是,我在定制方面遇到了一些困难。客户要求我们使用两个sql server 2005数据库,其中一个将复制另一个,减去一些列。

    乍一看,这似乎是一个无脑的。但是,默认情况下,亚音速会捕获所有列,从而导致sqlexception。我想 优雅地 按表限制选择列表。

    例如,下面的代码可以做到这一点,但我不希望每次新建查询时都这样做:

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

    这个问题

    上面的方法使我的代码膨胀,不适用于内置 FetchByX 由亚音速产生的方法。有没有办法把 违约 按表选择列表?

    笔记

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

    我知道,我知道

    请不要说“你是个白痴,为什么要这样做?”答案.我知道有很多更好的方法,这看起来有点老套,但这就是我要说的。我需要一个解决办法而不是纠缠。

    3 回复  |  直到 15 年前
        1
  •  2
  •   John Sheehan    15 年前

    我不认为有一个简单的方法可以让这个工作。可以创建两个指向每个数据库的亚音速提供程序,然后根据情况,使用亚音速对象填充单独的模型。但是亚音速并没有按照你想要的方式工作,因为它与数据库模式紧密相连。

        2
  •  0
  •   runxc1 Bret Ferrier    15 年前

    你的处境确实很棘手。即使您确实找到了让查询根据您使用的数据库版本获取列的方法,您现在也必须找出您在业务模型或ui中到处使用的数据库,这样您就不会引用不存在的列。

    我建议使用两个亚音速提供程序,然后让生成的类各自实现一个接口,该接口包含两个类共有的列的属性以及计划用于与数据库交互的亚音速方法,如save();。

    有时,当你想定制一些东西来工作时,你需要编写一些定制代码:)

        3
  •  0
  •   user1151    15 年前

    如果您对使用3.0(即将发布)持开放态度,我很乐意与您合作,开发一些TT模板修复程序来实现这一点(忽略rep列)。在gmail上给我打电话-我一直想这样做:)。

    3.0也允许您使用linq和我们的neq查询工具,但我想确保它不会破坏您的工作。

    推荐文章