Очень интересная проблема с отношениями SQL Server (SQL Server 2008R2, LINQ To SQL, Visual Studio 2010, C #) - PullRequest
1 голос
/ 09 октября 2010

Я работаю над веб-проектом.Я использую базу данных Sql Server 20008 R2 через LINQ To SQL, и сегодня я столкнулся с очень странной проблемой отношений.Я использовал их некоторое время и до сих пор не было никаких проблем.

Допустим, у меня есть таблица Stores, которая имеет следующие поля: ID, Name, LastUserID гдеLastUserID является «ссылкой» на таблицу Users.

Таблица Users имеет следующие поля: ID, Name, FavoriteStoreID, где FavoriteStoreID - это «ссылка» на таблицу Stores.

Так что я вроде какрекурсивные отношения.

Store.LastUser.Name // shows the name of the last user of the store

User.FavoriteStore.Name // shows the name of user's favorite store.

В конструкторе Visual Studio это выглядит следующим образом:

----------
-        -
- Users  -
-        -
----------


 |   / \
 |    |
 |    |
\ /   |


----------
-        -
- Stores -
-        -
----------

Теперь проблема в том, что при наличии двух стрелок (двух отношений) работает только одна из них,Когда я использую другой, я получаю ошибку Object reference not set to an instance of an object..

Когда я заново создаю таблицу, сначала добавьте эту связь (которая вызвала исключение), она работает.Но когда я добавляю еще один, он не работает.

Очевидно, что я что-то напутал, и SQL Server не понимает, как интерпретировать то, что я хочу, чтобы он делал.

Какя могу решить эту проблему?

Ответы [ 3 ]

1 голос
/ 10 октября 2010

Проблема в том, что дизайнер не может определить круговую ссылку.Я бы справился с этим, создав недостающую ссылку внутри конструктора.

0 голосов
/ 13 октября 2010

Я не уверен, в чем была проблема, но я заново создал таблицу, и теперь она отлично работает.Так LINQ To SQL DOES работает с циклическими ссылками.

0 голосов
/ 09 октября 2010

Похоже, вы устанавливаете две ассоциации сущностей, когда вам нужна только одна, и это может сбить с толку LINQ to SQL. В своем конструкторе dbml попытайтесь установить только одну связь между таблицами «Пользователи» и «Магазины», а в свойствах ассоциации установите количество элементов в OneToOne, и это должно создать дочернее свойство и родительское свойство для ваших сущностей «Пользователь» и «Магазин». Даже при наличии только одной связи между двумя таблицами вы все равно сможете получить хранилище из объекта «Пользователь» и пользователя из объекта «Хранилище».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...