Visual Studio 2013 Dataset Designer 刷新关系

Visual Studio 2013 Dataset Designer refresh relations

我有一个应用程序,其数据集链接到 sql 服务器数据库。我已经更新了 sql 服务器中的一些名称或外键和主键。我如何使这些更改转化为数据集。例如,我有一个名为 fk_temsempl_xxxxx 的主键。我在 sql 数据库上将其更改为 fk_temsempl。如何让更改显示在 visual studio 的数据集设计器中?

我已通过右键单击数据集并单击 运行 自定义工具来尝试使用 运行 自定义工具。那没有用。我尝试配置发生更改的 table 之一的 table 适配器,但关系的名称没有更改。

您实际上只需右键单击关系并选择 Edit Relation... 或双击该行(当鼠标光标从箭头变为拖动符号时)但老实说我不会打扰;然后,您将在代码中使用该关系的任何地方进行进一步的重构,并且它可以被视觉设计师大量使用。

您还会遇到 VS 可能无法帮助您进行重构的问题:在数据绑定场景中,大多数可以作为数据源的事物也可以是多个事物的集合,这些事物可以是有效的 DataSource.然后他们依靠字符串 DataMember 来确定数据源中的哪些数据集合应该用于数据。

例如,当绑定源绑定到列表 DataTable 时,bindingsource.DataSource 属性 可能是包含 DataTable, and theDataSet 对象bindingsource.DataMemberis a string of "YOUR_TABLE_NAME". the BindingSource might not be bound asmyBindignSource.DataSource = myDataSet.MyDataTable`。重构字符串内部涉及查找和替换

DataSet 中的 DataRelations 是根据外键创建的,因为它们是在将相关 table(s) 添加到数据集时发现的,但重要的是要注意,就像 DataTables 和其他所有东西一样,它们是与数据库模式对象完全无关——它们并不与它们永久关联,数据集实体只是在它们(数据集实体)首次创建时设置为看起来像数据库对象。 DataTable 仅根据所选的列创建,并且任何 .NET 数据类型都与查询输出的类型非常相似。对于 table 的:

Person
------
Name VARCHAR(50)
SSN INTEGER
Birthdate DATE

如果你用 SELECT * FROM Person 创建了 table 你会得到一个数据 table 和 Name (string), SSN (int), Birthdate (datetime) 但如果你创建了一个新数据 table基于 SELECT LEFT(Name, 1) as Initial, PADLEFT(SSN, 20) as PadSSN, DATEDIFF(day, Birthdate, NOW()) as AgeDays FROM Person 的数据集,那么您将获得 Initial (string), PadSSN (string), AgeDays (int) 的数据 table - 即数据 table 看起来与数据库 table 完全不同。这种数据集和数据库之间断开连接的概念是普遍存在的,实际上唯一以任何方式与数据库相关的是指定特定 DataTable/DataColumn 与哪个数据库 table/column 相关的属性,以便 loading/saving 数据。您的 Person.Name 数据列可以重命名为 Blahblah,但它仍然会有一个 .SourceColumn 属性 设置为 "Name" - 这就是数据集和数据集之间的映射方式分贝工程;数据集主要完全独立于数据库。重命名数据库列只需要更改 SourceColumn 属性

DataRelations 甚至没有链接到数据库中父关系的概念;没有 SourceRelationSourceFK 属性,因为没有必要。它们使用相同的规则和生成的名称进行设置,所有这些都是基于 FK 的规则,但是它们独立运行并且仅在数据集中运行。如果您重命名甚至从数据库中删除 FK,数据集将以与以往相同的受限方式继续工作;向子项添加数据行 table 当不存在任何行时会抛出异常 - none 它与数据库中的 FK 有任何关系,并且 DataRelation 可以有不同FK 的规则(例如,当 FK 为 NOACTION 时,它可以级联删除)甚至不同的列。您可以拥有比数据库拥有的 FKs

更多或更少的 DataRelations

运行 自定义工具不是 "contact the DB and see what changes have occurred there and replicate them into the dataset",它是 "turn the XSD that describes the dataset into a bunch of C# classes that implement strongly typed dataset/table/relation/column etc objects"。任何时候您通过在可视化设计器中进行编辑并点击保存来更改 XSD,自定义工具都是 运行。如果您直接在文本编辑器中编辑 XSD,您可能需要手动 运行 以在 c# 类

中反映您的更改

重新配置 table 适配器可能也不会对关系做任何事情;它仅与更改数据table 和table 适配器有关。如果您真的想刷新关系,请从集合中删除数据table 并重新创建它。准备好应对代码

的潜在重大拖把 up/refactoring