かなり大きな DBML ファイルがあり、最近、Visual Studio の MSLinqToSQLGenerator が以下とは異なる出力を生成していることを発見しました。
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 (nullable fkB) があります
エンティティ C には、fkA を A.id にリンクするアソシエーション C_A があり、fkA と fkB を B.fkA と B.id にリンクするアソシエーション C_B もあります。
C_B をサポートするプロパティのコードは、Visual Studio では生成されませんが、SqlMetal.exe によって生成されます。
このような協会は許されますか?コードが異なる方法で生成されている理由はありますか?