Используя Несколько Внешних ключей к той же таблице в LINQ

У меня есть таблица Users и таблица Items

В таблице Items у меня есть поля такой как

ModifiedBy CreatedBy AssignedTo

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

При использовании LINQToSQL отношения, которые автоматически построены от dbml, заканчивают тем, что дали мне имена как Пользователь, User1 и User2

например, myItem. User1. Имя или myItem. User2. Имя

Очевидно, это не очень читаемо, и я хотел бы его быть вроде

myItem. CreatedByUser. Имя или myItem. ModifiedByUser. Имя и т.д.

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

Есть ли какой-либо окольный путь это?

7
задан skaffman 4 April 2010 в 09:16
поделиться

3 ответа

Простой ответ: Нет.

Кто-то предложил идею создания частичных классов ассоциации, в которых имена свойств определяются, но это не сработает либо: Переименование свойств объекта LINQ 2 SQL через частичные классы .

Ваш выбор - либо потратить немного времени на изучение LINQ-to-SQL «за кулисами», чтобы можно было вручную внести необходимые изменения, либо просто изменить имена свойств в окне «Свойства». Лично я просто удаляю / перетаскиваю / переименовываю, потому что неправильная установка свойства - это боль для отладки, потому что генерируемые исключения практически не дают вам подсказки относительно того, что их вызвало. Я даже зашел так далеко, что создал библиотеку модульных тестов, которая принимает каждый объект MetaTable в модели и проверяет количество полей, содержимое ServerDataType каждого поля, количество ассоциаций, имена каждой ассоциации и имена каждого конца Ассоциация. Каждые несколько изменений я запускаю модульные тесты, чтобы убедиться, что модель не повреждена.

1
ответ дан 7 December 2019 в 14:30
поделиться

Во-первых, нет ... имена создаются на основе второй таблицы во взаимосвязи.

Но вы должны знать, что вам не нужно «обновлять» (то есть удалить таблицу в DBML, а затем перетащить ее заново).

Для проекта, над которым я работаю, у нас есть более 200 таблиц ... около 50 из которых мы вручную настроили после перетаскивания их из базы данных. Мы никогда никогда не удаляем и перетаскиваем таблицы, так как после автогенерации было внесено так много изменений.

1
ответ дан 7 December 2019 в 14:30
поделиться

Вы можете использовать linq to sql без dbml , это может быть дополнительной работой заранее, но с точки зрения изменения имени столбца таблицы это может быть проще чем изменения в dbml, как вы описали.

0
ответ дан 7 December 2019 в 14:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: