Почему дизайнер создает два.Дизайнер.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>
не уверен, какой из этих элементов управления имя сгенерированного файла, но вы можете попробовать вручную редактировать файл проекта, чтобы увидеть, если это имеет значение. Я бы сказал что нужно менять одновременно, а не только один.
Это случилось со мной сегодня, и я решил ее:
- закройте панель редактора edmx, если она открыта.
- в обозревателе решений удалите оскорбительный файл конструктора.
- сохранить все
- переименуйте файл edmx в другое имя (например, 2.edmx в)
- сохранить все
- откройте файл edmx и сохраните его для восстановления файла конструктора.
- в обозревателе решений переименуйте файл 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
- Закрыть Visual Studio
- сделать резервную копию папки проекта.
-
исправить файлы:
- перейдите в папку в проекте с файлами контекста данных например, дизайнер.ВБ, дизайнер.cs, [имя_проекта]модель.Дизайнер.ВБ [модель имя_проекта].edmx-файла
- сохранить самую последнюю измененную версию дубликатов файлов и удалить все другие.
- переименуйте эти файлы, чтобы удалить 1s, 2s и т. д. из имен файлов
- например, если [имя_проекта]Model1.Дизайнер.VB, [имяпроекта]Model2.Дизайнер.ВБ [модель имя_проекта].Дизайнер.VB существуют и [имяпроекта]Model2.Дизайнер.vb имеет самую последнюю измененную дату, удалите другую и переименуйте [имя_проекта]Model2.Дизайнер.vb для модели [имяпроекта].Дизайнер.vb.
- сделайте то же самое с любыми другими файлами, которые имеют дубликаты или 1.глаг, 1.cs прилагается к их.
- исправить файл проекта. откройте файл проекта с помощью любимого 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>
- откройте visual studio, и все должно быть хорошо.
У меня была та же проблема, модель генерировала второго дизайнера.cs файл. Это было после работы через целую кучу вопросов с моей установки vs2010 конструктора (как-то vs2010 потеряли ссылок на кучу dll файлы, относящиеся к модели EDM дизайнера, требуя rededits и переустанавливает).
следуя совету Кевина, я отредактировал файл проекта вручную, чтобы указать на мой предпочтительный файл, и он сработал. Дизайнер перестал воссоздавать второй файл.
Если вы используете какие-либо utils управления версиями, такие как SVN, самый простой способ исправить это-сравнить рабочую копию с предыдущими версиями и вернуть одну строку .csproj, где имя конструктора изменилось на это с суффиксом '1'.
имел ту же проблему, и ни один из старых ответов не работал для меня. Дополнительный дизайнер продолжал появляться.
мое дело (в рамках .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. См. сообщение Кевина для нескольких примеров.