【问题标题】:Visual Studio 2013 Dataset Designer refresh relationsVisual Studio 2013 数据集设计器刷新关系
【发布时间】:2020-01-08 17:23:19
【问题描述】:

我有一个应用程序,其数据集链接到 sql server 数据库。我已经更新了sql server中的一些名字或者外键和主键。我如何将这些更改转换为数据集。例如,我有一个名为 fk_temsempl_xxxxx 的主键。我在sql数据库上把它改成了fk_temsempl。如何在 Visual Studio 的数据集设计器中显示该更改?

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

【问题讨论】:

    标签: visual-studio-2013 dataset


    【解决方案1】:

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

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

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

    DataSet 中的 DataRelations 是从外键创建的,因为它们是在将相关表添加到数据集中时发现的,但重要的是要注意,与 DataTables 和其他所有内容一样,它们与数据库无关根本没有模式对象 - 它们不会与它们永久关联,数据集实体只是在首次创建它们(数据集实体)时设置为看起来像数据库对象。数据表仅从选定的那些列创建,并且任何 .NET 数据类型都与查询输出的类型非常相似。对于以下表格:

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

    如果您使用SELECT * FROM Person 创建表,您将获得带有Name (string), SSN (int), Birthdate (datetime) 的数据表,但如果您在基于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) 的数据表 - 即数据表看起来不像 db 表。数据集和数据库之间的这种断开连接的概念很普遍,实际上与数据库有任何关系的唯一事物是指定特定 DataTable/DataColumn 与哪个数据库表/列相关的属性,以便加载/保存数据。你的Person.Name 数据列可以重命名为Blahblah,但它仍然有一个.SourceColumn 属性设置为"Name"——这就是数据集和数据库之间的映射的工作方式;数据集主要完全独立于数据库。重命名数据库列只需要更改 SourceColumn 属性

    DataRelations 甚至没有链接到数据库中的父关系的概念;没有SourceRelation 或SourceFK proeprty,因为没有必要。它们使用相同的规则和生成的名称都基于 FK 的规则进行设置,但随后它们独立运行并且仅在数据集中运行。如果您重命名甚至从数据库中删除 FK,则数据集将继续以与以往相同的受限方式工作;当没有 aprent 行存在时将数据行添加到子表将引发异常 - 这与 db 中的 FK 没有任何关系,并且 DataRelation 可以与 FK 有不同的规则(例如,它可以级联删除当 FK 为 NOACTION 时)甚至不同的列。您可以拥有比数据库拥有的 FK 更多或更少的 DataRelations


    运行自定义工具不是“联系数据库,看看那里发生了什么变化并将它们复制到数据集中”,它是“将描述数据集的 XSD 转换为一组实现强类型数据集的 C# 类/table/relation/column 等对象”。每当您通过在可视化设计器中进行编辑并点击保存来更改 XSD 时,都会运行自定义工具。如果您直接在文本编辑器中编辑 XSD,您可能需要手动运行它以使您的更改反映在 c# 类中


    重新配置 tableadapter 也可能不会对关系做任何事情;它只关心更改数据表和表适配器。如果您真的想刷新关系,请从集合中删除数据表并重新创建它。为潜在的重大清理/重构代码做好准备

    【讨论】:

    • 感谢您的清晰解释。我看到那个拖把了。我希望微软能更新他们的数据集设计器。它需要大修。他们可以做得更好。我真的很喜欢数据集设计器,因为我可以向带有参数的表添加查询以限制所选数据。这很容易。我只是和设计师在一起更实用。
    猜你喜欢
    • 2011-02-08
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多