错误11和2002:“EntityContainer ...在MetadataWorkspace中不存在”

时间:2009-09-11 17:47:09

标签: .net linq entity-framework

当我尝试编译我的Web应用程序时出现以下错误:

  

错误11错误2002:MetadataWorkspace中不存在指定为此MSL一部分的概念模型的EntityContainer“SomeEntitieContainerName”。

我只有一个名为BancorlineDB.edmx的*.edmx,其“实体容器名称”设置为“BancorLineEntidades”。

8 个答案:

答案 0 :(得分:7)

这个错误只是我的分数:

使用Oracle数据库模式我在表上修改了主键字段的大小。 该字段是另一个表上的外键。 我忘了修改第二张表的大小。

在我的带有Entity Framework 5.0的.Net Web项目中,我从数据库中重新生成模型... ERROR 2002 EntityContainer bla ... bla ...

我花了很多时间来处理这个......愚蠢的错误和来自ODT 12的更愚蠢的信息。

答案 1 :(得分:3)

(很晚,我知道,但这个问题有很多观点)

我打赌你在某个地方改名了。 Visual Studio不会将这些更改传播到xml文件。在edmx xml中,查找<EntityContainerMapping CdmEntityContainer="badEntity" />代码,并使用正确的名称替换badEntity,在您的情况下BancorLineEntidades

也相关 - http://mvcmusicstore.codeplex.com/discussions/220395

答案 2 :(得分:2)

.edmx格式可能很容易导致故障排除。就您而言,可能是两个名称不匹配的情况。

使用XML编辑器打开.edmx文件,然后切换所有轮廓,您应该可以看到3个部分。

  1. SSDL

  2. CSDL

  3. C-S映射。

SSDL 存储对应于您的数据库表。 CSDL 概念对应于您的DbSetsObjectSetsC-S映射是每个概念集与存储集的关系方式。

<edmx:Edmx Version="3.0" xmlns:edmx="http://schemas.microsoft.com/ado/2009/11/edmx">
  <!-- EF Runtime content -->
  <edmx:Runtime>
    <!-- SSDL content -->
    <edmx:StorageModels>
      <Schema Namespace="SamDb.Store" Alias="Self" Provider="System.Data.SqlClient"...
        <EntityContainer Name="SamDbStoreContainer">
    </edmx:StorageModels>
    <!-- CSDL content -->
    <edmx:ConceptualModels>
      <Schema Namespace="SamDb" Alias="Self" ...>
        <EntityContainer Name="SamDbContainer" ...>
    </edmx:ConceptualModels>
    <!-- C-S mapping content -->
    <edmx:Mappings>
      <Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2009/11/mapping/cs">
        <EntityContainerMapping 
           StorageEntityContainer="SamDbStoreContainer"
           CdmEntityContainer="SamDbContainer" ...>
  </edmx:Runtime>
</edmx:Edmx>

要解决此问题,必须确保{-{1}}和StorageEntityContainer在C-S空间中匹配。在上面的示例中,它是CdmEntityContainerSamDbStoreContainer

答案 3 :(得分:1)

听起来您的配置存在问题,或者其中一个实体框架文件已损坏。

修复它的最快方法可能是删除模型,确保删除配置文件中对它的所有引用,然后从数据库重新生成模型。

答案 4 :(得分:0)

尝试禁用模型中的外键列。

答案 5 :(得分:0)

对我来说,我有类似的错误:

Schema specified is not valid. Errors: \r\nEntities.MyModel.msl(203,12) : error 2009: Content not valid. The conceptual side Member or Property 'Unit' specified as part of this MSL does not exist in MetadataWorkspace.

我在两个地方都有我的UNIT:

    <EntityTypeMapping TypeName="IsTypeOf(MyObjectCharacteristic)">
      <MappingFragment StoreEntitySet="OBJECT_CHARACTERISTICS">
        <ScalarProperty Name="Unit" ColumnName="UNIT" />
        <ScalarProperty Name="ClassName" ColumnName="CLASSNAME" />
        <ScalarProperty Name="MyObjectID" ColumnName="OBJECTID" />
      </MappingFragment>
    </EntityTypeMapping>

  <EntitySet Name="OBJECT_CHARACTERISTICS" EntityType="Self.OBJECT_CHARACTERISTICS" store:Type="Views" store:Schema="DBA">
    <DefiningQuery>SELECT
    dbo.RESOURCE.OBJECTID,
    dbo.RESOURCE.CLASSNAME,
    dbo.RESOURCE.UNIT
    FROM dbo.RESOURCE
    </DefiningQuery>
  </EntitySet>

另外,我必须确保表示数据库表的对象的关联类实体详细信息具有UNIT数据成员:

<EntitySetMapping Name="ObjectCharacteristics">
    <EntityTypeMapping TypeName="IsTypeOf(ObjectCharacteristic)">
        <ScalarProperty Name="Unit" ColumnName="UNIT" />
        <ScalarProperty Name="ClassName" ColumnName="CLASSNAME" />
        <ScalarProperty Name="ObjectId" ColumnName="OBJECTID" />
    </EntityTypeMapping>
</EntitySetMapping>

而且,

<EntityType Name="ObjectCharacteristic" A:TypeAccess="Public" xmlns:a=""http://schemas.microsoft.com/ado/2006/04/codegeneration">
    <Key>
        <PropertyRef Name="ObjectId" />
    </Key>
    <Property Name="ObjectId" Type="String" />
    <Property Name="ClassName" Type="String" />
    <Property Name="Unit" Type="String" />
</EntityType>

答案 6 :(得分:0)

我也在使用Oracle和Entity Framework。最初从数据库生成模型时,出现此错误。我尝试从一个表开始,然后修改模型并一次添加一个表(这花了一段时间)。除〜8个左右的表外,此方法有效。我检查了外键,但没有发现任何可能引起问题的东西。最终在edmx图表编辑器中手动添加新实体,手动添加属性,以及将列手动映射到属性。

答案 7 :(得分:-1)

有时您必须重新启动 Visual Studio 才能在修复 EDMX 文件后清除此错误。