.net - DBML 定制与再生

标签 .net linq-to-sql

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

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

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

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

1。我可以将这些更改反射(reflect)在 SQL Server 上吗?

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

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

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

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

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

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

最佳答案

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

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

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

sync options dialog

excluding one side of a FK association

关于.net - DBML 定制与再生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3566951/

相关文章:

c# - 如何在不依赖注入(inject)的情况下模拟我们正在 C# 中测试的同一类的另一个方法

c# - 接受 int[] 和 List<int> 的方法

c# - 这段代码在做什么?

c# - Linq To Sql 一对多

c# - LINQ2SQL : Join multiple tables

c# - 依赖响应 cookie 的集成测试抛出 System.NullReferenceException

.net - 使用 F# 控制台 onExit 事件

c# - 使用 .mdf 数据库的 C# 表单应用程序中的 Linq to sql 问题

c# - 填写下拉列表并将分配的产品计数附加到每个

c# - 部分类中的接口(interface)实现问题