使用非PK字段的动态数据一对多关系:外表List.aspx链接使用不正确的键进行一对多关系

时间:2009-11-26 22:07:54

标签: c# asp.net dynamic-data asp.net-dynamic-data

问题:在具有一对多关系的表之间创建的URL不正确。我该如何解决这个问题?

我正在使用LINQ to SQL和动态数据。

我有两个表:用户和地址:

* There is a one-to-many from Users TO Addresses ie: A user may have one or more addresses. 
* The two tables are NOT linked using their primary keys, but using a separate GUID field.
* The User table has Id (int) as it's PK and 'PrincipalId' (Guid) as the linking key
* The Addresses table has AddressId(int) as it's PK and 'PrincipalId' (Guid) as the linking key
* 'PrincipalId' is unique in the user table.
* The 'Association' looks good in the DataAccess class, and was done using the dbml designer.

症状:

在查看用户表时,我会在末尾看到一个列,其中包含“查看用户地址”链接,如下所示:http://dev.cityslurp.com/Addresses/List.aspx?PrincipalId=18

注意:

  1. PrincipalId是GUID,不是int,所以我认为'18'实际上应该是GUID
  2. 整数正确映射到User.Id值
  3. 所以我认为链接应该是这样的:http://dev.cityslurp.com/Addresses/List.aspx?PrincipalId=157221EF-C85C-4FDF-B861-60D149E11BFC,但是后面会给出错误:“'DropDownList1'有一个无效的SelectedValue,因为它在项目列表中不存在。参数名称:value “ - 我假设这个错误是因为下拉值期望一个整数。
  4. 所以即使#3给我一个错误,我认为这是正确的查询参数。

    相反,当我转到Address / List.aspx页面时,我有一个链接回用户详细信息页面的列。链接正确显示用户的电子邮件地址作为文本,但链接错误。例如,对于同一个用户,他们在地址列表页面中的链接是:http://dev.cityslurp.com/Users/Details.aspx?Id=157221ef-c85c-4fdf-b861-60d149e11bfc

    注意:

    1. User.Id 用户表的PK
    2. User.Id是一个整数
    3. 使用的Guid是'PrincipalId'字段中的值
    4. 由于链接包含电子邮件地址的文本,并且Guid是正确的,似乎关系正常,只是Id错误。
    5. 我假设链接应该如下所示:http://dev.cityslurp.com/Users/Details.aspx?Id=70,用于查看用户详细信息。

      我认为这可能是一个错误,但其他人之前使用非PK字段成功地使用了一对多的关系?

      关系看起来很好,因为他们正在使用我指定的字段。

      以下是自动生成的DataAccess文件中关系的示例:

      [表(名称= “dbo.Address”)]     public partial class地址:INotifyPropertyChanging,INotifyPropertyChanged     {

      ...

       [Association(Name="Users_Address", Storage="_Users", ThisKey="PrincipalId", OtherKey="PrincipalId", IsForeignKey=true)]
          public Users Users
          {
              get
              {
      

      ...

      有什么想法怎么办?我知道我可以为用户和地址创建自定义列表页面,但我正在寻找一种更简单的方法 - 可能在其中一个部分类上放置一个属性来告诉他们该做什么。

      干杯, 兰斯

0 个答案:

没有答案