Entity Framework - 无法创建引用相同 table 的多个 DbContext。 - 解决方法

Entity Framework - Cannot create multiple DbContexts that reference the same table. - Workaround

根据标题,场景是:一个 c-sharp 项目,有两个文件夹,每个文件夹包含两个 EDMX 上下文...

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

通常这很有效,直到您在两个上下文中共享相同的 table。设计时没有问题,实体 类 在不同的命名空间下生成,只是在运行时才会出现以下错误:

Schema specified is not valid. Errors: The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type 'TB_MyTable'. Previously found CLR type 'Namespace.NSOne.TB_MyTable', newly found CLR type 'Namespace.NSTwo.CIXModel.TB_MyTable'.

在搜索答案时,我遇到了一个 Github 问题,该问题几乎表明 "it is too hard / not trivial" 我们不会解决。 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>

我的问题/问题是,在我的项目中找不到上面带有 "ConceptualModels" 的 xml 片段?!

我从哪里开始看?在我的 edmx 文件中(通过 visual studio),我只能看到,例如,

EntityFramework.dll、EntityFramework.SqlServer.dll 版本为:

File version: 6.2.61023.0 Product version: 6.2.0-61023

不是真正的答案,但微软似乎已经放弃了 EF 数据库优先 (EDMX),所以在提出这个问题两个月后,我的下一个选择是自己从我当前的项目中摆脱它。

在未来的项目中,我还将优先使用 EF 代码,因为 VS 仍然允许轻松生成强类型 类。

ConceptualModels 是 EDMX 文件中的部分。

您只需要使用 XML 文本编辑器打开它。

  1. 右击
  2. 打开方式
  3. XML 文本编辑器。