我有一个定义了很多外键关系的数据库。当我只是将这些FK连接中涉及的任何表拖到DBML编辑器中时,为了机器生成DBML文件,这些都将表示为关联。
从这里我可以对这些关联进行任何更改:我可能希望关联的父端为internal
而不是public
,以便JSON序列化程序(例如)不会陷入循环引用;或者在表Form
和FormAnswer
之间的连接中,我可能希望调用子属性Answers
而不是机器生成FormAnswers
。
现在,如果更改了数据库设计,并且我想更新DBML以反映此更改,那么这些自定义似乎需要我跟踪每个更改并手动更新它(添加属性,设置它的源,源数据类型,C#数据类型......)
这可能是一个相当繁琐的过程;我问的是,是否有任何方法可以实现自动化。
理想的解决方案似乎是,如果有任何方法可以直接在SQL Server数据库图表中制作这些规范,那么就可以完全重新生成DBML文件(删除所有内容并将其拖到DBML编辑器中)重新获得完全相同的结果。
怀疑我已经知道上述内容,如果可以实现,我很乐意和解:
由于所有Linq to SQL实体都是作为部分类生成的,我想了一段时间我可以创建一个新文件,我手动维护,我可以将所有更改复制到上面。< / p>
所以每当我改变一个关联时,我会深入研究designer.cs代码,剪切修改后的关联,并将其粘贴到我自己的文件中。重新生成后,我会期望任何重复的编译器错误,并轻松地逐步执行并从DBML中删除这些关联。这里的问题是关联似乎只是属性的属性。如果Form
具有名为Answers
的属性,并且DBML生成器将尝试创建名为FormAnswers
的属性,则生成的Form
对象将只具有这两个属性,而不是根本就是我想要的。
有没有人对这些解决方案中的任何一个有任何好运?或者如果您知道处理问题的任何其他方式,我愿意接受建议。
答案 0 :(得分:6)
我有add-in for VS (2008, 2010, 2012, and 2013)可以帮到你。它增加了DB&lt; =&gt; DBML同步,并具有许多设置,可让您控制要同步的更改类型,以及“排除列表”,允许您将单个表/视图/成员/ FK标记为“不要触摸”项目。
至于FK =&gt;您提到的关联问题:同步选项允许您排除所有或individual child navigation properties以避免在序列化实体对象时可能导致麻烦的循环引用。
如果您想将其用于测试旋转,可以从http://www.huagati.com/dbmltools/下载该加载项。
excluding one side of a FK association http://forum.huagati.com/upload/2/exclusionChdProp.png
答案 1 :(得分:1)
我没有找到任何方法根据对数据库的更改自动更新我的DBML,而不清除整个画布并再次重新拖动项目。正如你所说,FK都被重命名为默认值,这很烦人。
DBML是XML格式的,我经常发现,一旦主要的数据库更改安定下来,只需编辑XML(Open With ...)并在那里进行修改就会更快更容易到作为我项目的一部分而保留的创建脚本。
然后重建,或者只是运行自定义工具以重新生成对cs文件的更改。
这是在VS 2008,不确定它在2010年是否仍然是一个挑战。
HTH
答案 2 :(得分:1)