我有一个相当大的 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(可为空的 fkB)
实体 C 具有关联 C_A,将 fkA 链接到 A.id 它还具有关联 C_B,将 fkA 和 fkB 链接到 B.fkA 和 B.id
支持 C_B 的属性代码不会由 Visual Studio 生成,而是由 SqlMetal.exe 生成。
允许这种关联吗?代码生成方式不同是否有原因?