MSLinqToSQLGenerator создает другой вывод, чем SQLMetal - PullRequest
1 голос
/ 07 августа 2009

У меня довольно большой файл 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.

Разрешается ли такая связь? Есть ли причина, по которой код генерируется по-другому?

1 Ответ

2 голосов
/ 07 сентября 2009

Оказывается (с помощью Microsoft), что SQLMetal генерирует выходные данные, отличные от MSLinqToSQLGenerator в IDE, поскольку в файле DBML (созданном инструментом, который я создал) были определены некоторые отношения, в которых родитель мог получить доступ к дочерним элементам, но дочерние не определить родительскую ассоциацию. Очевидно, вам необходимо определить связь между дочерним элементом и родительским элементом (отношение внешнего ключа). Если у вас есть только связь между родителем и определенными дочерними элементами и не определена обратная ассоциация (или у обратной ассоциации другое имя), исходный код .NET для этой ассоциации не будет сгенерирован ни в одном из направлений. Это правильно обрабатывается для MSLinqToSQLGenerator, но SQLMetal, по-видимому, не выполняет такой большой проверки и в любом случае будет генерировать код ассоциации. Microsoft сообщила об этой проблеме в разработку.

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