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

Doo*_*ake 10 entity-framework entity-framework-4

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

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

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

Kev*_*van 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>
Run Code Online (Sandbox Code Playgroud)

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

我们也有这个部分:

<EntityDeploy Include="Domain\Model.edmx">
  <Generator>EntityModelCodeGenerator</Generator>
  <LastGenOutput>Model.Designer.vb</LastGenOutput>
  <CustomToolNamespace>Domain</CustomToolNamespace>
</EntityDeploy>
Run Code Online (Sandbox Code Playgroud)

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


小智 5

原因:

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

症状:

  • [项目名称]Model1.Designer.cs、[项目名称]Model2.Designer.vb 等文件以及[项目名称]Model.Designer.cs、[项目名称]Model.Designer.vb 文件
  • 额外的实体文件,格式为 [entityname]1.vb、[entityname]1.cs,例如 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>
Run Code Online (Sandbox Code Playgroud)
  • 项目文件引用了 Model1.Designer、Model2.Designer 等,例如:
 <EntityDeploy Include="Models\DataContexts\FooModel.edmx">
   <Generator>EntityModelCodeGenerator</Generator>
   <LastGenOutput>FooModel1.Designer.vb</LastGenOutput>
</EntityDeploy>
Run Code Online (Sandbox Code Playgroud)
  • 项目文件引用了多个实体或文件名中带有 1.vb 或 1.cs 的实体。
<Compile Include="Models\Entities\Person1.vb" />
Run Code Online (Sandbox Code Playgroud)
  • 项目可以正确构建和运行,但新文件可能不受版本控制。

补救

  1. 关闭 Visual Studio
  2. 备份项目文件夹。
  3. 修复文件:
    • 转到项目中包含数据上下文文件的文件夹,例如 Designer.vb、Designer.cs、[项目名称]Model.Designer.vb、[项目名称]Model.edmx
    • 保留重复文件的最新修改版本并删除所有其他版本。
    • 重命名这些文件以从文件名中删除 1、2 等
    • 例如,如果 [项目名称]Model1.Designer.vb、[项目名称]Model2.Designer.vb、[项目名称]Model.Designer.vb 存在并且 [项目名称]Model2.Designer.vb 具有最近的修改日期,则删除其他并将 [项目名称]Model2.Designer.vb 重命名为 [项目名称]Model.Designer.vb。
    • 对附加有重复项或 1.vb、1.cs 的任何其他文件执行相同的操作。
  4. 修复项目文件。 使用您喜欢的 xml 或文本编辑器打开项目文件并修复以下引用。(搜索“1.”、“Model1”、“2.”、“Model2.”也会找到这些。)
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>
Run Code Online (Sandbox Code Playgroud)
  1. 打开视觉工作室,一切都应该很好。