У меня довольно большой файл DBML, и недавно я обнаружил, что MSLinqToSQLGenerator в Visual Studio генерирует вывод, отличный от:
SqlMetal.exe All.dbml /code:All.designer.vb /namespace:LINQ2FSE /pluralize /provider:SQL2005
Кажется, из сгенерированного кода VB отброшен произвольный (и я думаю, относительно небольшой) набор ассоциаций. Но SQLMetal отлично работает. Разве результат не должен быть таким же?
После дальнейших исследований я обнаружил, что различие, похоже, связано с сущностями, которые включают свойства, которые также используются с другими ассоциациями на той же сущности с другим числом столбцов. Например:
У объекта A есть столбцы id и name
У объекта B есть столбцы id, name и fkA (внешний ключ для A)
У объекта C есть столбцы id, name, fkA и fkB (обнуляемый fkB)
Объект C имеет ассоциацию C_A, которая связывает fkA с A.id
он также имеет ассоциацию C_B, которая связывает fkA и fkB с B.fkA и B.id
Код для свойств, поддерживающих C_B, не будет сгенерирован Visual Studio, но будет сгенерирован SqlMetal.exe.
Разрешается ли такая связь? Есть ли причина, по которой код генерируется по-другому?