使用SqlMetal和Visual Studio时自动生成DataContext设计器文件

时间:2008-09-25 14:00:59

标签: asp.net visual-studio-2008 linq-to-sql dbml sqlmetal

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

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

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

  1. 转到Windows资源管理器并删除dbml和designer.cs文件
  2. 转到Visual Studio并在解决方案资源管理器中点击“刷新”。 dbml和designer.cs文件现在从项目中消失。
  3. 使用SqlMetal
  4. 重新生成dbml文件
  5. 转到Visual Studio并在解决方案资源管理器中点击“刷新”。现在重新创建designer.cs文件。
  6. 当检测到一个还没有designer.cs文件的新dbml文件时,Visual Studio似乎只会生成designer.cs文件。这个过程非常不切实际,因为它涉及几个手动步骤并且使用源代码控制进行混乱。

    有没有人知道如何在不遵循上述手动删除/刷新/重新生成/删除过程的情况下自动重新生成designer.cs文件?

2 个答案:

答案 0 :(得分:6)

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

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

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

sqlmetal /code:DataContext.designer.cs /language:csharp DataContext.dbml

答案 1 :(得分:3)

不确定它是如何做到的,但这里有一些我努力将其取回的东西。

有东西被锁定了,所以它生成了一个新的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