2008-09-25 66 views
4

我使用SqlMetal来为我的ASP.NET.net应用程序使用LinqToSql将DataContext.dbml类泛化。当我最初创建DataContext.dbml文件时,Visual Studio使用它来创建相关的DataContext.designer.cs文件。这个设计器文件包含整个应用程序使用的C#中的DataContext类(并且源自dbml文件中的XML),对于弥合SqlMetal的输出和使用DataContext与LinqToSql之间的差距至关重要。使用SqlMetal和Visual Studio时DataContext设计器文件的自动生成

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

我已经能够使用至今再生设计文件的唯一进程是

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

似乎Visual Studio只会在检测到一个尚未包含designer.cs文件的新dbml文件时生成designer.cs文件。这个过程是非常不切实际的,因为它涉及几个手动步骤,并通过源代码控制来解决问题。

有没有人知道我可以自动重新生成designer.cs文件,而无需遵循上面列出的手动删除/刷新/再生/删除过程?

回答

4

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

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

原始海报:运行自定义工具在Visual Studio中工作以重新生成designer.cs文件。

我还发现了一个更好的解决方案 - 您可以使用SqlMetal生成类文件:“sqlmetal /code:DataContext.designer.cs/language:csharp DataContext.dbml”。

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

+0

感谢道格,这就是我一直在寻找。它不断创建一个重复的设计器文件,并且让我感到无法接受。 这解决了我的问题。 – AceCorban 2014-01-23 21:02:15

相关问题