Рискованный бизнес с LINQ to SQL и OR Designer? - PullRequest
1 голос
/ 12 января 2011

У меня есть две таблицы с отношением один ко многим в SQL 2008. Первая таблица (BBD)

PK |BBDataID |ИНТ|Floor_Qty |TINYINT|Construct_Year |символ (4)|etc, etc

описывает данные, общие для всех зданий, а второй (BBDCerts)

PK |BBDCertsID |ИНТ|BBDataID |ИНТ|Certification_Type |VARCHAR (20)|etc, etc

- это набор сертификатов для конкретного здания.Таким образом, первичный ключ в BBD (BBDataID) сопоставляется с соответствующим полем в BBDCerts через отношение FK, но BBDCertsID является первичным ключом второй таблицы, а BBDataID - не потому, что он не будет уникальным.

Моя проблемаявляется то, что я хочу иметь возможность использовать сгенерированный ИЛИ контекст данных, чтобы попасть в список сертификатов, когда я получаю доступ к определенной записи в таблице BBD.Например:

Dim vals = (From q in db.BBD 
            Where q.BBDataID = x
            Select q.Floor_Qty, q.Construct_Year, q.BBDCerts).SingleOrDefault

и более поздние версии смогут получить доступ к определенной сертификации, например:

vals.BBDCerts.Certification_Type.First

Теперь автоматические ассоциации, созданные при удалении таблиц SQL на поверхности конструктора, не имеютне генерировать ассоциации EntityRef, которые необходимы для доступа к другой таблице с использованием точечной нотации.Итак, Я должен использовать конструктор OR, чтобы сделать BBDCerts BBDataID первичным ключом (это не влияет на фактическую базу данных), а затем вручную изменить свойства ассоциации на соответствующие параметры OneToMany.

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

1 Ответ

0 голосов
/ 13 января 2011

Спасибо за вотум доверия, Том. Я начинал думать, что я сошел с ума.

Очевидно, что ключ (без каламбура) является первичным ключом в дочерней таблице. Оказывается, у меня вообще не было первичного ключа на дочернем столе. Я добавил (повторно добавил?) Ключ для BBDCertsID, перестроил контекст данных, и теперь он работает. Не уверен, почему это работало с моим объявлением PK только для OR, но теперь конфигурация имеет смысл и не требует ручной обработки.

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