Линк и БД отношения - PullRequest
0 голосов
/ 26 мая 2009

быстрый вопрос, ребята.

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

код, который я переносил, имел некоторые причуды, которые привели к некоторым ситуациям, когда я не могу навязать отношения (PK <-> FK). Мне было интересно, является ли это принудительное отношение обязательным для Linq to SQL?

спасибо за помощь:)


как я прокомментировал один из возможных ответов ...

вопрос гораздо проще:

разрешает ли linq извлечение данных об отношениях, для которых непротиворечивость не применяется? Я не говорю о добавлении большего количества реквизита ...

это будет означать функциональность для значений, которые ДОЛЖНЫ иметь правильные отношения PK <-> FK, я думаю (как я сказал, я не проверял это, возможно, некоторые из вас имеют?). и что это будет делать для ценностей, которые не существуют? поднять нулевую ссылку?

Ответы [ 2 ]

2 голосов
/ 26 мая 2009

Сгенерированные автоматически классы LINQ to SQL (находятся в файле .cs под dbml) имеют значение частичное , поэтому при необходимости вы можете добавлять дополнительные свойства и функции.

Явные связи в SQL используются LINQ для добавления свойств - например, если у вас есть таблица Customers и таблица Orders с явными связями, LINQ сможет поместить коллекцию строго типизированных заказов в качестве свойства на Объект клиента. Без этого он сможет только добавить CustomerID (int или что-либо еще) в объект Order.

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

0 голосов
/ 26 мая 2009

Отношения в БД не являются обязательными. Он используется конструктором для автоматического определения «свойств» отношения, но вы можете добавить свои собственные и указать, какие скалярные свойства определяют отношение в обеих таблицах. (Щелкните правой кнопкой мыши конструктор, выберите «Добавить взаимосвязь» и укажите таблицы и столбцы или перетащите с помощью инструмента «взаимосвязь»)

Будьте осторожны, хотя. Если ваша проблема заключается в том, что приложение хранит «значения местозаполнителя» для определения «отсутствия связи» (например, нулевого значения, которое не имеет аналога в таблице первичного ключа), вы можете столкнуться с возбуждаемыми исключениями, если попытаетесь получить доступ к соответствующему члену код.

Если проблема заключается в том, что исходное приложение хранит вещи в неправильном порядке (что не позволяет вам применять ограничение FK), но когда все сказано и сделано, у вас есть согласованные данные, тогда у вас не должно возникнуть проблем.

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