3

問題: 1 対多の関係を持つテーブル間で作成された URL が正しくありません。どうすればこれを修正できますか?

動的データで LINQ to SQL を使用しています。

ユーザーとアドレスの 2 つのテーブルがあります。

* 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 は int ではなく GUID であるため、「18」は実際には GUID である必要があると思います
  2. 整数は User.Id 値に適切にマップされます
  3. したがって、リンクはhttp://dev.cityslurp.com/Addresses/List.aspx?PrincipalId=157221EF-C85C-4FDF-B861-60D149E11BFCのようになるはずですが、それに続くとエラーが発生します: "'DropDownList1' has aアイテムのリストに存在しないため無効な SelectedValue. パラメータ名: 値" - このエラーは、ドロップダウン値が整数を予期しているためであると想定しています。

したがって、# 3 でエラーが発生しても、使用するのに正しいクエリ パラメーターだと思います。

逆に、Address/List.aspx ページに移動すると、[ユーザーの詳細] ページに戻るリンクを含む列が表示されます。リンクはユーザーの電子メール アドレスをテキストとして正しく表示しますが、やはりリンクが間違っています。たとえば、同じユーザーの場合、アドレス リスト ページからのリンクは次のとおりです

ノート:

  1. User.IdUser テーブルの PK です。
  2. User.Id は整数です
  3. 使用される Guid は、「PrincipalId」フィールドの値です
  4. リンクには電子メール アドレスのテキストが含まれており、Guid が正しいため、関係が機能しているように見えますが、ID が間違っているだけです。

リンクはhttp://dev.cityslurp.com/Users/Details.aspx?Id=70のようになるはずです。これは、ユーザーの詳細を表示するために機能します。

これはおそらくバグだと思いますが、確かに他の人は以前に非PKフィールドを使用して1対多の関係をうまく使用していましたか?

私が指定したフィールドを使用しているという点で、関係は良好に見えます。

自動生成された DataAccess ファイルの関係の例を次に示します。

[Table(Name="dbo.Address")] public partial class Address : INotifyPropertyChanging, INotifyPropertyChanged {

...

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

...

何をすべきかのアイデアはありますか?ユーザーとアドレスのカスタム リスト ページを作成できることはわかっていますが、より簡単な方法を探しています。おそらく、部分クラスの 1 つに属性を配置して、適切に行うべきことを伝えます。

乾杯、ランス

4

0 に答える 0