为什么设计人员在从数据库更新模型时会创建两个.Designer.cs文件?

时间:2011-10-18 14:00:00

标签: entity-framework entity-framework-4

就像问题所说:在Visual Studio中,当我在Model.edmx中,当我从数据库更新模型... 添加一些新的数据库字段后,它创建了几乎重复的Model1。与原始Model.Designer.cs发生冲突的Designer.cs文件。

我可以删除新的Model1.Designer.cs文件,但是新添加的字段不可用。

是否有解决方案(除了删除和重新创建模型)?

7 个答案:

答案 0 :(得分:10)

听起来您可能删除并重新创建了模型(或类似的东西),但将原始设计器文件保留在目录中。然后,当您添加新模型时,必须使用Model1而不是Model作为设计器文件名。您是否尝试排除Model.Designer.cs文件并使其与Model1.Designer.cs文件一起使用?

好的,看一下我们项目的项目文件中的模型,我可以看到以下可能相关的部分:

<Compile Include="Domain\Model.Designer.vb">
  <AutoGen>True</AutoGen>
  <DesignTime>True</DesignTime>
  <DependentUpon>Model.edmx</DependentUpon>
</Compile>

我相信这个告诉项目代码文件是项目的一部分,应该是文件model.edmx的子节点,并在更改时重新生成。

我们也有这个部分:

<EntityDeploy Include="Domain\Model.edmx">
  <Generator>EntityModelCodeGenerator</Generator>
  <LastGenOutput>Model.Designer.vb</LastGenOutput>
  <CustomToolNamespace>Domain</CustomToolNamespace>
</EntityDeploy>

不确定这些控件中的哪一个控制了生成的文件名,但您可以尝试手动编辑项目文件以查看它是否有所作为。我说你需要同时改变它们,而不仅仅是一个。

答案 1 :(得分:3)

今天发生在我身上,我通过以下方式解决了这个问题:

  1. 如果已打开edmx编辑器窗格,请将其关闭。
  2. 在解决方案资源管理器中,删除有问题的设计器文件。
  3. 全部保存
  4. 将edmx文件重命名为其他名称(例如2.edmx)
  5. 全部保存
  6. 打开edmx文件并保存以重新生成设计器文件。
  7. 在解决方案资源管理器中,将edmx文件重命名为其原始名称。

答案 2 :(得分:2)

<强>原因:

我可以重新创建它(并且偶尔会错误地执行):它会在运行项目时尝试保存数据库图表(edmx文件),以致Visual Studio无法写入各种文件并生成具有新名称的文件。可能有其他方法通过使文件不可写来重新创建它。该项目将继续工作,它只是为版本控制创建一个问题,我想象一些部署模型。

<强>症状:

  • [projectname] Model1.Designer.cs,[projectname] Model2.Designer.vb等文件以及[projectname] Model.Designer.cs,[projectname] Model.Designer.vb files
  • [entityname] 1.vb,[entityname] 1.cs等形式的额外enitity文件,如Person1.vb

  • 项目文件引用了冗余文件,例如:

<Compile Include="Models\DataContexts\FooModel.Designer.vb" />

<Compile Include="Models\DataContexts\FooModel1.Designer.vb">
  <AutoGen>True</AutoGen>
  <DesignTime>True</DesignTime>
  <DependentUpon>FooModel.edmx</DependentUpon>
</Compile>
  • 项目文件引用了Model1.Designer,Model2.Designer等,如:
 <EntityDeploy Include="Models\DataContexts\FooModel.edmx">
   <Generator>EntityModelCodeGenerator</Generator>
   <LastGenOutput>FooModel1.Designer.vb</LastGenOutput>
</EntityDeploy>
  • 项目文件引用了文件名中包含1.vb或1.cs的多个实体或实体。
<Compile Include="Models\Entities\Person1.vb" />
  • 项目可以正确构建和运行,但新文件可能不受版本控制。

<强>解决方法

  1. 关闭Visual Studio
  2. 备份项目文件夹。
  3. 修复文件:
    • 使用数据上下文文件转到项目中的文件夹,例如Designer.vb,Designer.cs,[projectname] Model.Designer.vb,[projectname] Model.edmx
    • 保留最近修改过的重复文件版本并删除所有其他文件。
    • 重命名这些文件以从文件名
    • 中删除1s,2s等
    • 例如,如果[projectname] Model1.Designer.vb,[projectname] Model2.Designer.vb,[projectname] Model.Designer.vb存在且[projectname] Model2.Designer.vb具有最近修改日期,删除另一个并将[projectname] Model2.Designer.vb重命名为[projectname] Model.Designer.vb。
    • 对任何其他具有重复项的文件或附加1.vb,1.cs的文件执行相同操作。
  4. 修复项目文件。使用您喜欢的xml或文本编辑器打开项目文件并修复以下引用。 (搜索&#34; 1。&#34;,&#34; Model1&#34;,&#34; 2.&#34;,&#34; Model2。&#34;也会找到这些。 )
  5. Change:
    
        <Compile Include="Models\DataContexts\FooModel.Designer.vb" />
        <Compile Include="Models\DataContexts\FooModel1.Designer.vb">
          <AutoGen>True</AutoGen>
          <DesignTime>True</DesignTime>
          <DependentUpon>FooModel.edmx</DependentUpon>
        </Compile>
    
    To:
    
        <Compile Include="Models\DataContexts\FooModel.Designer.vb">
          <AutoGen>True</AutoGen>
          <DesignTime>True</DesignTime>
          <DependentUpon>FooModel.edmx</DependentUpon>
        </Compile>
    
    
    
    Change:
        <Compile Include="Models\DataContexts\Person1.vb">
          <DependentUpon>Foo.tt</DependentUpon>
        </Compile>
    
    To:
    
        <Compile Include="Models\DataContexts\Person1.vb">
          <DependentUpon>Foo.tt</DependentUpon>
        </Compile>
    
    
    
    Change:
        <EntityDeploy Include="Models\DataContexts\FooModel.edmx">
          <Generator>EntityModelCodeGenerator</Generator>
          <LastGenOutput>FooModel1.Designer.vb</LastGenOutput>
        </EntityDeploy>
    
    
    To:
    
        <EntityDeploy Include="Models\DataContexts\FooModel.edmx">
          <Generator>EntityModelCodeGenerator</Generator>
          <LastGenOutput>FooModel.Designer.vb</LastGenOutput>
        </EntityDeploy>
    
    1. 打开视觉工作室,一切都很好。

答案 3 :(得分:0)

我遇到了同样的问题,该模型正在生成第二个designer.cs文件。这是在解决了与设计者相关的vs2010的安装问题之后(不知何故,vs2010失去了对数据实体模型设计者需要重新编译和重新安装的一堆DLL的引用)。

根据Kevin的建议,我手动编辑了项目文件以指向我的首选文件并且它有效。设计师停止重新创建第二个文件。

答案 4 :(得分:0)

如果您正在使用SVN之类的任何版本控制工具,最简单的解决方法是将工作副本与以前的版本进行比较,并在.csproj中恢复一行,其中设计器名称更改为后缀为“1”的行。

答案 5 :(得分:0)

答案 6 :(得分:0)

有同样的问题,没有一个旧的答案对我有用。额外的设计师不断出现。

我的原因(在.csproj中):

 <Compile Include="DAL\MyDataSet.cs">
   <DependentUpon>MyDataSet.xsd</DependentUpon>
   <SubType>Component</SubType>
 </Compile>

解决方案:

 <Compile Include="DAL\MyDataSet.cs">
   <DependentUpon>MyDataSet.xsd</DependentUpon>
 </Compile>

额外的SubType导致MSDataSetGenerator每次运行两次。删除子类型后,您仍然需要删除任何其他错误生成的MyDataSet1.Designer.cs条目。有关几个例子,请参阅Kevin的帖子。