Проблема: неверные 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
Примечание:
- PrincipalId - это GUID, а не int, поэтому я думаю, что «18» на самом деле должно быть GUID
- Целое число правильно отображается на значение User.Id
- Так что я думаю, что ссылка должна выглядеть следующим образом: http://dev.cityslurp.com/Addresses/List.aspx?PrincipalId=157221EF-C85C-4FDF-B861-60D149E11BFC,, но после этого выдается ошибка: «DropDownList1» имеет значение SelectedValue, которое недопустимо, поскольку его нет в списке элементов. «- Я предполагаю, что эта ошибка связана с тем, что в раскрывающемся списке ожидается целое число.
Так что, хотя # 3 выдает мне ошибку, я думаю, что это правильный параметр запроса для использования.
И наоборот, когда я перехожу на страницу Address / List.aspx, у меня появляется столбец со ссылками на страницу сведений о пользователе. Ссылки правильно отображают адрес электронной почты пользователя в виде текста, но опять же ссылка неверна. Например, для того же пользователя его ссылка со страницы списка адресов: http://dev.cityslurp.com/Users/Details.aspx?Id=157221ef-c85c-4fdf-b861-60d149e11bfc
Примечание:
- User.Id - это PK для таблицы User
- User.Id является целым числом
- Используемый Guid является значением из поля «PrincipalId»
- Поскольку ссылка содержит текст адреса электронной почты, а Guid верен, может показаться, что отношения работают, просто Id неверен.
Я предполагаю, что ссылка должна выглядеть следующим образом: http://dev.cityslurp.com/Users/Details.aspx?Id=70,, которая работает для просмотра сведений о пользователе.
Я думаю, что это может быть и ошибка, но наверняка другие успешно использовали отношения один-ко-многим, используя не-PK поля раньше?
Отношения выглядят хорошими в том смысле, что они используют поля, которые я указал.
Вот пример отношения в автоматически сгенерированном файле DataAccess:
[Таблица (Name = "dbo.Address")]
открытый частичный класс Адрес: INotifyPropertyChanging, INotifyPropertyChanged
{
...
[Association(Name="Users_Address", Storage="_Users", ThisKey="PrincipalId", OtherKey="PrincipalId", IsForeignKey=true)]
public Users Users
{
get
{
...
Есть идеи, что делать? Я знаю, что могу создавать пользовательские страницы списка для пользователей и адресов, но я ищу более простой способ - возможно, добавив атрибут в один из частичных классов, чтобы сказать им, что делать правильно.
Ура,
Lance