Почему при обновлении модели из базы данных дизайнер создает два файла .Designer.cs? - PullRequest
10 голосов
/ 18 октября 2011

Как и в вопросе: в Visual Studio, когда в Model.edmx, когда я обновляю модель из базы данных ... после добавления нескольких новых полей базы данных, создается почти дубликат Model1.Designer. Файл .cs, вызывающий конфликты с исходным Model.Designer.cs.

Я могу удалить новый файл Model1.Designer.cs, но затем новые добавленные поля недоступны.

Есть ли решение для этого (кроме удаления и повторного создания модели)?

Ответы [ 7 ]

10 голосов
/ 18 октября 2011

Похоже, что вы, возможно, удалили и воссоздали модель (или что-то подобное), но оставили исходный файл конструктора в каталоге. Затем, когда вы добавили новую модель, она должна была использовать 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>

Не уверен, какой из этих элементов управляет сгенерированным именем файла, но вы можете попробовать вручную отредактировать файл проекта, чтобы увидеть, если это что-то меняет. Я бы сказал, что вам нужно изменить оба одновременно, а не только один.

3 голосов
/ 10 декабря 2015

Это случилось со мной сегодня, и я решил это следующим образом:

  1. Закройте панель редактора edmx, если она у вас открыта.
  2. В обозревателе решений удалите нарушающий конструкторфайл.
  3. Сохранить все
  4. Переименовать файл edmx с другим именем (например, 2.edmx)
  5. Сохранить все
  6. Открыть файл edmx исохраните его для регенерации файла конструктора.
  7. В обозревателе решений переименуйте файл edmx обратно к его первоначальному имени.
2 голосов
/ 29 декабря 2015

Причина:

Я могу воссоздать это (и делаю по ошибке время от времени): происходит попытка сохранить диаграмму базы данных (файл edmx) во время выполнения проекта, так что Visual Studio не может записывать в различные файлы и генерирует файлы с новыми именами. Могут быть и другие способы воссоздать его, сделав файлы недоступными для записи. Проект будет продолжать работать, он просто создает проблему для контроля версий, и я представляю некоторые модели развертывания.

Симптомы:

  • [имя проекта] Model1.Designer.cs, [имя проекта] Model2.Designer.vb и другие файлы вместе с файлами [имя проекта] Model.Designer.cs, [имя проекта] Model.Designer.vb
  • дополнительные файлы enitity в форме [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>
  • Файл проекта имеет ссылку на 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, [имя проекта] Model.Designer.vb, [имя проекта] Model.edmx
    • Сохраните самую последнюю модифицированную версию дубликатов файлов и удалите все остальные.
    • Переименуйте эти файлы, чтобы удалить 1, 2 и т. Д. Из имен файлов
    • Например, если [имя_проекта] Model1.Designer.vb, [имя_проекта] Model2.Designer.vb, [имя_проекта] Model.Designer.vb существует и [имя_проекта] Model2.Designer.vb имеет самую последнюю дату изменения, удалите другой и переименуйте [projectname] Model2.Designer.vb в [projectname] 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>
  1. Откройте визуальную студию и все должно быть хорошо.
0 голосов
/ 14 октября 2016

У меня была такая же проблема, и ни один из старых ответов не помог мне. Дополнительный дизайнер продолжал появляться снова.

Моя причина (в .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. Посмотрите пост Кевина для нескольких примеров.

0 голосов
/ 07 октября 2014

Об этом сообщили в Microsoft, но они не смогли воспроизвести его.

См. https://connect.microsoft.com/VisualStudio/feedback/details/532800/msdatasetgenerator-create-another-designer1-cs-file-for-my-typed-dataset

0 голосов
/ 12 августа 2014

Если вы используете какие-либо утилиты управления версиями, например SVN, самый простой способ исправить это - сравнить рабочую копию с предыдущими ревизиями и вернуть одну строку в .csproj, где имя дизайнера изменилось на имя с суффиксом «1».

0 голосов
/ 24 января 2012

У меня была такая же проблема, модель генерировала второй файл designer.cs. Это было после проработки целого ряда проблем с моей установкой vs2010, связанных с конструктором (каким-то образом vs2010 потерял ссылки на кучу DLL, связанных с конструктором модели сущностей данных, требующих переопределения и переустановки).

Следуя советам Кевина, я отредактировал файл проекта вручную, чтобы указать на мой предпочитаемый файл, и он сработал. Дизайнер перестал воссоздавать второй файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...