【问题标题】:DBML customization vs regenerationDBML 定制与再生
【发布时间】:2019-08-07 03:12:07
【问题描述】:

我有一个定义了很多外键关系的数据库。当我简单地将这些 FK 连接中涉及的任何表拖到 DBML 编辑器中,以便机器生成 DBML 文件时,这些都将表示为关联。

从这里我可以对这些关联进行任何更改:我可能希望关联的父端是 internal 而不是 public 以便 JSON 序列化程序(比如说)不会陷入循环参考;或者在表FormFormAnswer 之间的连接中,我可能希望将子属性称为Answers,而不是机器生成的FormAnswers

现在,如果数据库设计发生更改,并且我想更新 DBML 以反映此更改,这些自定义似乎需要我跟踪每一个更改并手动更新它(添加属性,设置它的源,源数据类型,C#数据类型……)

这可能是一个相当乏味的过程;我要问的是是否有任何方法可以自动执行此操作。

1。我可以将这些更改反映在 SQL 服务器上吗?

似乎理想的解决方案是,如果有任何方法可以直接在 SQL Server 数据库图表中制作这些规范,以便完全重新生成 DBML 文件(删除所有内容并将其拖到 DBML 编辑器中) anew) 会得出完全相同的结果。

怀疑我已经知道上述内容,如果可以实现,我很乐意接受:

2。我可以将这些更改提取到它自己的类中吗?

由于所有 Linq to SQL 实体都是作为部分类生成的,我想了一会儿我可以创建一个新文件,我可以手动维护它,我可以将所有提到的更改复制到该文件中。

因此,每当我更改了关联时,我都会深入研究 Designer.cs 代码,剪切修改后的关联,然后将其粘贴到我自己的文件中。重新生成后,我预计任何重复项都会出现编译器错误,并且可以轻松地逐步检查并从 DBML 中删除这些关联。这里的问题是关联似乎只是具有属性的属性。如果Form 有一个名为Answers 的属性,并且DBML 生成器将尝试创建一个名为FormAnswers 的属性,则生成的Form 对象将只具有这两个属性,这根本不是我想要的。

有没有人对这些解决方案有任何运气?或者,如果您知道任何其他解决问题的方法,我愿意提供建议。

【问题讨论】:

    标签: .net linq-to-sql


    【解决方案1】:

    我有一个add-in for VS (2008, 2010, 2012, and 2013) 可以帮助你。它添加了 DB DBML 同步,并有许多设置让您可以控制要同步的更改类型,以及“排除列表”允许您将单个表/视图/成员/FK 标记为“不要触摸”项目。

    至于您提到的 FK => 关联问题:同步选项允许您排除所有或 individual child navigation properties 以避免在序列化实体对象时可能导致麻烦的循环引用。

    如果您想试用该插件,可以从 http://www.huagati.com/dbmltools/ 下载该插件。

    【讨论】:

    • 我将奖励这个赏金,因为它是唯一真正解决我所要求的答案。不过,我还没有确定策略。最后我可能会选择 Ladislav 的替代方案,或者 Fluent Linq to SQL,但我想这些解决方案并不能真正解决最初的问题。感谢您的意见。
    • 酷,感谢您的赏金! :) 顺便说一句,你在 ezy 工作吗?向我那里的每个人问好。
    【解决方案2】:

    我还没有找到任何方法来根据对数据库的更改自动更新我的 DBML,而无需清除整个画布并再次重新拖入项目。正如你所说,FK 都被重命名为默认值,这很烦人。

    DBML 是 XML 格式,我经常发现,一旦主要的数据库更改稳定下来,只需编辑 XML(打开方式...到我作为项目的一部分保留的创建脚本。

    然后您重新构建,或者只是运行自定义工具来重新生成对 cs 文件的更改。

    这是在 VS 2008 中,不确定在 2010 年是否仍然是一个挑战。

    HTH

    【讨论】:

      【解决方案3】:

      在 Linq-To-Sql 设计器中完全缺少任何更新命令。所以我认为设计师在真正的增量项目中是不可用的。解决这个问题的方法有以下三种:

      • 不要使用设计器和code 你的映射
      • 不要使用设计器并将映射写入XMLSqlMetal 有助于初始生成。
      • 创建将添加您的修改的自定义工具。每次重新生成完整的模型并运行此工具。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多