5

我正在使用SqlMetal为使用 LinqToSql 的 ASP.net 应用程序通用我的 DataContext.dbml 类。当我最初创建 DataContext.dbml 文件时,Visual Studio 使用它来创建相关的 DataContext.designer.cs 文件。此设计器文件包含 C# 中的 DataContext 类,该类在整个应用程序中使用(并且从 dbml 文件中的 XML 派生),对于弥合 SqlMetal 的输出和使用带有 LinqToSql 的 DataContext 之间的差距至关重要。

但是,当我对数据库进行更改并重新创建 dbml 文件时,设计器文件永远不会在我的网站中重新生成。而是保留旧的设计器文件(因此对 DBML 文件的任何更改都不能通过 LinqToSql DataContext 类访问)。

到目前为止,我能够用来重新生成设计器文件的唯一过程是

  1. 转到 Windows 资源管理器并删除 dbml 和 Designer.cs 文件
  2. 转到 Visual Studio 并在解决方案资源管理器中点击刷新。dbml 和 Designer.cs 文件现在从项目中消失了。
  3. 使用 SqlMetal 重新生成 dbml 文件
  4. 转到 Visual Studio 并在解决方案资源管理器中点击刷新。现在重新创建了 Designer.cs 文件。

似乎 Visual Studio 只会在检测到新的 dbml 文件但还没有 Designer.cs 文件时才会生成 Designer.cs 文件。这个过程非常不切实际,因为它涉及几个手动步骤,并且会弄乱源代码控制。

有谁知道我如何可以自动重新生成 Designer.cs 文件,而无需遵循上述手动删除/刷新/重新生成/删除过程?

4

2 回答 2

7

当您在 Visual Studio 中更改 DBML 时,designer.cs 文件通常会自动维护。如果重新创建 DBML 时 VS 没有运行,它可能不知道。

检查 Visual Studio 中的 .DBML 文件是否将自定义工具属性设置为 MSLinqToSQLGenerator。如果不是,则将其设置为该值。如果是在进行更改后尝试右键单击 DBML 并选择运行自定义工具以查看是否更新了 .designer.cs。

您还可以使用 SqlMetal 生成类文件:

sqlmetal /code:DataContext.designer.cs /language:csharp DataContext.dbml
于 2008-09-25T17:20:13.587 回答
4

不知道它是怎么做到的,但这里有一些我努力让它回来的事情。

它被锁定了,所以它生成了一个新的 db.designer.cs 文件 (db1.designer.cs)。

我无法比较打开,将该文件与前一个文件进行比较(BC不应该锁定,我认为这不是问题,以前从未遇到过这个问题。)

在记事本中打开项目文件并查找这些条目,我在源代码管理中恢复到以前的版本..

这是我带回来的。

<Compile Include="db.designer.cs">
      <AutoGen>True</AutoGen>
      <DesignTime>True</DesignTime>
      <DependentUpon>db.dbml</DependentUpon>
</Compile>

 ... 

<LastGenOutput>db.designer.cs</LastGenOutput>

lastgenOutput 设置为 db1.desginer.cs

于 2011-08-23T18:18:42.187 回答