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

亚音速BatchQuery.Queue导致“无法决定要考虑密钥的属性…”异常

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

    SubSonic docs . 我使用的是批处理,所以我可以一次查询用户和用户订单列表。

    当我调用BatchQuery.Queue()方法,添加我的“选择用户”查询时,亚音速抛出以下异常:

    System.InvalidOperationException:无法决定要考虑密钥的属性-您可以创建一个名为“ID”的属性,或使用SubSectionPrimaryKey属性标记一个属性

    代码如下:

    var db = new MyDB();
    var userQuery = from u in db.Users //gets user by uid
                    where u.uid == 1
                    select u;
    
    var provider = ProviderFactory.GetProvider();
    var batch = new BatchQuery(provider);
    batch.Queue(userQuery); //exception here
    
    //create and add "select users orders" query here...
    

    第一件事-为什么

    我可以问一些其他的问题,但我就不提了。如果有人能帮我弄清楚发生了什么,以及如何发布2个批处理查询,我将不胜感激!

    编辑 -经进一步调查

    我用调试器运行了源代码。Adam是正确的-Objects.cs中的ToSchemaTable()方法显然正在构建我的模式,但找不到PK。最后,它尝试查找名为“ID”的列属性并将其标记为PK,否则将抛出异常。我添加了一个“UID”的检查,这是有效的!

    2 回复  |  直到 15 年前
        1
  •  2
  •   user1151 user1151    15 年前

    我想你要找的答案是,这是我一个非常愚蠢的错误。我希望下周能推出另一个版本,如果你能把它列入发行清单,我将非常感激。我的道歉。。。

        2
  •  1
  •   Adam Cooper    15 年前

    亚音速希望您的主键被称为Id,所以它会变得混乱。SubsecPrimaryKey用于简单存储库,但我假设引发异常的位置是在不同模板之间共享的。如果您将PK重命名为Id或Id或Id,您的查询将起作用。

    推荐文章