Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 刷新LINQ to SQL设计器中的表时出现问题_Visual Studio_Visual Studio 2008_Linq_Linq To Sql - Fatal编程技术网

Visual studio 刷新LINQ to SQL设计器中的表时出现问题

Visual studio 刷新LINQ to SQL设计器中的表时出现问题,visual-studio,visual-studio-2008,linq,linq-to-sql,Visual Studio,Visual Studio 2008,Linq,Linq To Sql,我使用LINQtoSQL已经有一段时间了,有一件事一直困扰着我。每当我修改表的模式时,为了在设计器中刷新它,我必须先删除它,然后再重新添加它。这很好,但这意味着我必须在designer中找到表。我的数据库中有大约100多个表,每次我这样做,就像大海捞针一样。嗯,也许没那么糟糕,但说真的,它需要的时间比它应该需要的要长 是否还有另一个我不知道的刷新表的选项?我与设计人员有过类似的问题-我能建议的最好办法是为数据访问的不同区域创建多个上下文-我将我的表分解为尽可能少的几个相关表,以供每个功能区域使用

我使用LINQtoSQL已经有一段时间了,有一件事一直困扰着我。每当我修改表的模式时,为了在设计器中刷新它,我必须先删除它,然后再重新添加它。这很好,但这意味着我必须在designer中找到表。我的数据库中有大约100多个表,每次我这样做,就像大海捞针一样。嗯,也许没那么糟糕,但说真的,它需要的时间比它应该需要的要长


是否还有另一个我不知道的刷新表的选项?

我与设计人员有过类似的问题-我能建议的最好办法是为数据访问的不同区域创建多个上下文-我将我的表分解为尽可能少的几个相关表,以供每个功能区域使用。您可以跨上下文重用表,因此这不是什么大问题。

我个人讨厌使用设计器,每当我敢使用它时,我都会遇到各种各样的问题

我通常将LINQ用于非常简单的CRUD(没有链接的实体或任何东西),如果您是这样的话,那么可能值得从designer的拐杖开始。特别是因为定义LINQ到SQL实体非常简单:

[Table("dbo.my_table")]
public class MyTable
{
[Column("id", AutoSync = AutoSync.OnInsert, IsDbGenerated = true, IsPrimaryKey = true)]
public Int32 Id { get; set; }

[Column("name", DbType="NVarChar(50) NOT NULL")]
public String Name { get; set; }
}
这样,您的所有实体都有自己的文件,这使得查找它们更加容易,尽管您仍然需要手动添加/更新属性


当然,如果要重构100多个表,这可能不是一个选项;)

VS 2008有一个模板替代了设计器,它应该可以轻松刷新LINQtoSQL类:

还有几个其他选项:

  • 编辑设计器用于绘制表和生成代码的.dbml文件。我在变化很小时使用过这种方法(添加两列,创建一个简单的表)
  • 使用sqlmetal为更改的表创建所需的xml,并手动将声明移动到.dbml文件中。当更改更复杂或更大时,此选项更适合

  • 使用VS linq to sql设计器是不可能的

    您可以使用第三方工具llblgenpro而不是内置的linqtosql设计器来实现这一点。它不是免费的,但它也做了很多其他的事情,当然你可能需要也可能不需要

    LLBLGEN PRO实际上是一整套ORM工具,但还包括一个增强的linq到sql设计器,具有“从sql刷新模型”功能

    有关问题的说明,请参见此处- 这里是工具-

    一些人用来“刷新/更新”他们的Linq2Sql设计器。当数据库更改时,设计器不支持刷新架构。您必须手动删除该表并将其重新添加回

    我相信你能振作起来。我没有用过它,但我想我在今年的TechEd演示中看到了它


    有用信息:对于SqlMetal。

    我没有在设计器上对内容进行任何自定义,所以在表更改后,我只需按CTRL+A,然后按DEL。然后按住shift键,选择所有我的表,并将它们重新放到设计器中。我还没有100个表,所以不确定事情是否会在某个时候变慢,但有20多个表,这只需要一秒钟。

    我已经编写了一个插件,可以做到这一点(在两个方向上;数据库->DBML或DBML->SQL-DDL差异脚本)

    与另一个回复中提到的SQLMetal(或EF的“从数据库更新模型”)不同,外接程序执行真正的同步/刷新;仅根据模型和基础数据库之间的差异应用更改

    这意味着您在模型的其他区域中所做的任何自定义(重命名属性/导航属性等)都不会被删除/覆盖,除非它们与基础db架构冲突。(在这种情况下,您仍然可以通过将它们添加到外接程序的“排除列表”来保留它们)


    你可以下载它并从

    获得免费的30天试用许可证。我有一个类似的评论,我想它可能适合任何人在谷歌上搜索解决这个问题的方法

    当我更改存储过程返回的列时,从设计器中删除该过程并重新添加它是不起作用的。设计器生成的自定义返回类型实体不反映对SP的更改

    我曾尝试在服务器资源管理器中断开DB的连接,甚至删除并重新添加连接

    我找到的唯一解决方案是: 1.从设计器中删除SP。 2.保存dbml文件(或整个解决方案,无论什么) 3.完全关闭VisualStudio。 4.重新打开Visual Studio和您的解决方案。 5.将存储过程重新添加到设计器中

    我认为这就是屁股上的蓝丝带痛。 有人有更简单的解决办法吗

    PS-对于那些拥有100多个表的人:去获得一个真正的(real==成熟的)ORM工具。我个人投票给内蒂尔斯。它摇晃。使用多年,没有(或至少很少)抱怨。您可能需要购买CodeSmith才能有效地使用它,但这是值得的。这些模板是开源的。还有nHibernate的模板。但我发现我并没有真正深入研究Java端口。如果我要在MS平台上编写代码,我想要的代码是“天生”的


    …编辑完成:P

    谢谢你的建议,但我真的不想陷入手工编码的境地。我喜欢代码生成,只是不喜欢糟糕的刷新支持。这是有道理的,但就我的情况而言,我认为不值得为了记住要为哪个表使用哪个上下文而进行权衡。另外,如果在不同的上下文中使用同一个表,如果您更新该表,您需要记住更新该表中使用的所有上下文。此模板替换了DBML到代码阶段,而不是用户遇到问题的数据库到DBML阶段。这肯定是我发现自己也在做的事情,但对于100个表来说,速度稍微慢了一点