Почему дизайнер создает два.Дизайнер.cs-файлы при обновлении модели из базы данных?

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

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

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

7 ответов


похоже, вы удалили и воссоздали модель (или что-то подобное), но оставили исходный файл конструктора в каталоге. Затем, когда вы добавили новую модель, она должна была использовать Model1 вместо Model в качестве имени файла конструктора. Вы пробовали исключить модель.Дизайнер.cs-файл и оставить его работать с Model1.Дизайнер.вместо этого cs-файл?

Хорошо, глядя на файл проекта для нашего проекта с моделью, я вижу следующее потенциально актуальное разделы:

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

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

у нас также есть в этом разделе:

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

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


Это случилось со мной сегодня, и я решил ее:

  1. закройте панель редактора edmx, если она открыта.
  2. в обозревателе решений удалите оскорбительный файл конструктора.
  3. сохранить все
  4. переименуйте файл edmx в другое имя (например, 2.edmx в)
  5. сохранить все
  6. откройте файл edmx и сохраните его для восстановления файла конструктора.
  7. в обозревателе решений переименуйте файл edmx обратно в исходный имя.

причина:

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

симптомы:

  • [имя_проекта]Model1.Дизайнер.в CS, [имя_проекта]звонит model2.Дизайнер.vb, etc. файлы рядом с моделью [projectname].Дизайнер.cs, [имя_проекта]модель.Дизайнер.файлы VB
  • дополнительные файлы enitity в виде [entityname] 1.vb, [entityname] 1.в CS, например 1, которое.vb

  • файл проекта содержит ссылки на дополнительные файлы, такие as:

<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.Дизайнер, Звонит Model2.Конструктор etc как:
 <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" />
  • проект может быть построен и запущен правильно, но новые файлы могут быть не в версии управление.

Remedy

  1. Закрыть Visual Studio
  2. сделать резервную копию папки проекта.
  3. исправить файлы:
    • перейдите в папку в проекте с файлами контекста данных например, дизайнер.ВБ, дизайнер.cs, [имя_проекта]модель.Дизайнер.ВБ [модель имя_проекта].edmx-файла
    • сохранить самую последнюю измененную версию дубликатов файлов и удалить все другие.
    • переименуйте эти файлы, чтобы удалить 1s, 2s и т. д. из имен файлов
    • например, если [имя_проекта]Model1.Дизайнер.VB, [имяпроекта]Model2.Дизайнер.ВБ [модель имя_проекта].Дизайнер.VB существуют и [имяпроекта]Model2.Дизайнер.vb имеет самую последнюю измененную дату, удалите другую и переименуйте [имя_проекта]Model2.Дизайнер.vb для модели [имяпроекта].Дизайнер.vb.
    • сделайте то же самое с любыми другими файлами, которые имеют дубликаты или 1.глаг, 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. откройте visual studio, и все должно быть хорошо.

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

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


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


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

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


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

мое дело (в рамках .csproj):

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

устранение:

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

дополнительный подтип заставил MSDataSetGenerator работать дважды каждый раз. После удаления подтипа вам все равно нужно будет удалить любой другой ошибочно сгенерированный MyDataSet1.Дизайнер.записи cs. См. сообщение Кевина для нескольких примеров.