在LINQ to SQL设计器中刷新表时出现问题

时间:2008-12-05 21:32:56

标签: visual-studio visual-studio-2008 linq linq-to-sql

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

是否有其他选项可以刷新我不知道的表格?

9 个答案:

答案 0 :(得分:7)

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

ADO Entity Framework我相信可以刷新。我没有用它,但我想我今年在TechEd演示中看到过这个。

有用的信息:Google's results用于SqlMetal。

答案 1 :(得分:3)

使用VS linq to sql designer是不可能的。

你可以使用LLBLGEN PRO,第三方工具,而不是内置的linq to sql designer。它不是免费的,但它确实做了很多其他的东西,当然你可能需要也可能不需要。

LLBLGEN PRO实际上是一套完整的ORM工具,但还包括一个增强的linq-to-sql设计器,带有'来自SQL的刷新模型'功能。

请点击此处查看问题说明 - http://weblogs.asp.net/fbouma/archive/2008/05/01/linq-to-sql-support-added-to-llblgen-pro.aspx 这里是工具 - http://www.llblgen.com/

答案 2 :(得分:1)

我没有对设计器上的内容进行任何自定义,因此在表更改后我只需按CTRL + A然后按DEL。然后换档 - 选择我的所有表格并将它们拍回设计师。我还没有100张表,所以不确定某些事情是否会在某些时候变慢,但是有20多个表只需要一秒钟。

答案 3 :(得分:1)

我编写了一个可以执行此操作的加载项(在两个方向上;数据库 - > DBML DBML- - > SQL-DDL差异脚本)。

与另一个回复中提到的SQLMetal(或EF的“数据库更新模型”)不同,加载项执行真正的同步/刷新;应用仅与模型和基础数据库之间的差异相对应的更改。

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

您可以从http://www.huagati.com/dbmltools/

下载并获得免费的30天试用许可

答案 4 :(得分:1)

我有一个类似的评论,认为它可能适合任何人在那里谷歌搜索这个问题的解决方案......

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

我尝试断开服务器资源管理器中的数据库,甚至删除并重新添加连接。

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

我认为这有点像臀部的蓝带疼痛。 有人得到一个更简单的解决方案吗?

PS-对于拥有100多个表的人:去获得一个真实的(真正的=成熟的)ORM工具。我个人投票支持NetTiers。它摇滚。使用它多年没有(或至少很少)投诉。你可能不得不购买CodeSmith来有效地使用它,但这是值得的。模板是开源的。还有nHibernate的模板。但我发现我并没有真正挖掘Java端口。如果我要在MS平台上编码,我想要那些“天生”的代码......

...编辑完成。 :P

答案 5 :(得分:0)

我与设计师有类似的问题 - 我可以建议的最好的事情是为数据访问的不同区域创建多个上下文 - 我将我的内容分解为与每个功能区域相关的少量相关表格。您可以跨上下文重用表,这不是什么大问题。

答案 6 :(得分:0)

VS 2008有一个替换设计器的模板,它可以轻松刷新LINQtoSQL类:http://damieng.com/blog/2008/09/14/linq-to-sql-template-for-visual-studio-2008

答案 7 :(得分:0)

还有其他几种选择:

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

答案 8 :(得分:-1)

我个人厌恶使用设计师,每当我敢于使用它时,我就会遇到各种各样的问题。

我主要使用LINQ进行非常简单的CRUD(没有链接的实体或任何东西),如果是这种情况,那么可能值得偏离设计师的拐杖。特别是因为定义LINQ-to-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多个表,那可能不是一个选项;)