Entity Framework - Невозможно создать несколько DbContexts, которые ссылаются на одну и ту же таблицу.- Обходной путь - PullRequest
0 голосов
/ 19 февраля 2019

Согласно заголовку, сценарий: один проект c-sharp, с двумя папками, каждая из которых содержит два контекста EDMX ...

Myproj \ NSOne \ ModelOne.edmx, Myproj \ NSTwo\ ModelTwo.edmx;

Обычно это работает хорошо, пока вы не используете одну и ту же таблицу в обоих контекстах.Нет проблем во время разработки, классы сущностей генерируются в разных пространствах имен, только во время выполнения выдается следующая ошибка:

Указанная схема недопустима.Ошибки: Отображение типа CLR в тип EDM неоднозначно, потому что несколько типов CLR соответствуют типу EDM 'TB_MyTable'.Ранее обнаруженный тип CLR «Namespace.NSOne.TB_MyTable», недавно обнаруженный тип CLR «Namespace.NSTwo.CIXModel.TB_MyTable».

При поиске ответов я столкнулся с проблемой Github, которая довольно симпатична.Много сказать "это слишком сложно / не тривиально", мы не будем исправлять.https://github.com/aspnet/EntityFramework6/issues/362

Однако, обходной путь - отредактировать файл EDMX, как упоминалось в этом выпуске github.

<ConceptualModels>
    <Schema Namespace="ConsoleApplication33" 
        Alias="Self" 
        annotation:UseStrongSpatialTypes="false"
        xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" 
        xmlns:customannotation="http://schemas.microsoft.com/ado/2013/11/edm/customannotation" 
        xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
    <EntityType Name="Person" 
        customannotation:ClrType="MyApp.Person, MyApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
        <Key>
        <PropertyRef Name="Id" />
        </Key>
        <Property Name="Id" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
        <Property Name="Name" Type="String" MaxLength="Max" FixedLength="false" Unicode="true" />
    </EntityType>
    <EntityContainer Name="Town" customannotation:UseClrTypes="true">
        <EntitySet Name="People" EntityType="Self.Person" />
    </EntityContainer>
    </Schema>
</ConceptualModels>

Моя проблема / вопрос заключается в том, что в моем проекте приведенный выше фрагмент xml с«Концептуальных моделей» нигде не найти?!

Куда мне вообще начать искать?В моих файлах edmx (через visual studio) я могу видеть только, например,

  • ModelOne.edmx
    • ModelOne.Context.tt
    • ModelOne.Designer.csharp
    • ModelOne.edmx.diagram
    • ModelOne.tt

EntityFramework.dll, EntityFramework.SqlServer.dll имеют следующие версии:

Версия файла: 6.2.61023.0 Версия продукта: 6.2.0-61023

1 Ответ

0 голосов
/ 17 апреля 2019

Не совсем ответ, но, похоже, Microsoft отказалась от EF Database-first (EDMX), поэтому следующим вариантом для меня через два месяца после того, как я задала вопрос, было избавиться от него лично из моего текущего проекта.

В будущих проектах я также буду использовать EF Code-first, учитывая, что VS по-прежнему позволяет легко генерировать строго типизированные классы.

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