EF映射和元数​​据信息找不到EntityType错误

当我使用Entity Framework 4.0 RC时遇到了一个exception。 我的entity framework模型封装在一个名为Procurement.EFDataProvider的私人程序集中,而我的POCO类在另一个程序集Procurement中。Core(业务逻辑)和EFDataProvider(数据访问)之间的关系是一个名为DataProvider

所以当我尝试创build一个对象集

objectSet = ObjectContext.CreateObjectSet<TEntity>(); 

我收到一个错误:

无法findEntityType“Procurement.Core.Entities.OrganizationChart”的映射和元数​​据信息。

对于处理这个错误的其他人,我认为值得一提的是,我发现了一些导致这个(极其无用的)错误的场景:

  • 拼写错误的属性(区分大小写!)
  • POCO类中缺less的属性
  • inputPOCO和实体types之间的不匹配(例如,int而不是long)
  • 在POCO中引入(EF目前不支持枚举)

可能还有其他原因。

HTH

这可能是因为EF无法findembedded的映射信息。 在你的连接string中,你可能会有像他这样的东西:

 metadata=res://*/Models.MyModels.csdl|...etc 

*是一个通配符,告诉对象上下文试图findembedded的映射信息,我想扫描所有加载的程序集。 如果程序集未加载,EF将无法find它。

你需要做的是提供连接string更多关于你的映射信息embedded的信息。 将*更改为映射代码的特定程序集名称:

 metadata=res://Procurement.EFDataProvider/Models.MyModels.csdl 

如果失败,find大会,并直接加载到您的ObjectContext使用:

 ObjectContext.Metadataworkspace.LoadFromAssembly(); 

与上述不直接相关,但如果你得到这个错误信息,你已经混合了一个POCO和一个普通的模型:坏主意!

请参阅JRoppert在EF4 POCO(不使用T4)的评论:找不到EntityType的映射和元数​​据信息 (感谢JRoppert!)

我得到这个错误,因为我没有正确使用自定义命名空间在同一个程序集中的edmx文件。

这是关于System.Data.Objects.ObjectContext中的exception的说法

//例外:

  // System.InvalidOperationException: // When the System.Data.Metadata.Edm.EntitySet from entitySetName // does not match the System.Data.Metadata.Edm.EntitySet of the object's // System.Data.EntityKey. // -or- // When the System.Data.Objects.ObjectContext.DefaultContainerName // property is not set on the System.Data.Objects.ObjectContext and // the name is not qualified as part of the entitySetName parameter. // -or- // When the specified type belongs to more than one entity set. 

当连接string没有在configuration文件中指定时,我也看到了它。

另一个可能的问题是, 如果您使用的是代码优先,而您的实体types是在单独的程序集中定义的上下文定义的位置,而您没有将任何自定义映射添加到OnModelCreating(DbModelBuild modelBuilder)方法,则EF似乎忽略数据注释。

解:

添加modelBuilder.Entity<YourEntityType>();OnModelCreating(DbModelBuild modelBuilder)方法。

相关文章 。

只需检查模型的属性拼写

可能还有另一个原因。 我也拉了我的头发一晚。

我发现解决scheme中的参考文献有些混乱。 在我的项目中, edmx属于一个名为DataAccess.Dll的项目。 但我没有从我的exe文件中提到它。 从我的EXE我有一个名为Business.Dll另一个项目的引用,这个项目有一个DataAccess.DLL旧位置的引用。

进行以下testing,看看是否有这样的问题:

  1. 打开你的exe项目的bin导演,并保持可见。
  2. build立解决scheme。
  3. 第一个将要构build的项目是数据访问项目,您可以在bin文件夹中看到当前时间为修改date。
  4. 在构build其他项目的同时,您将看到DataAccess项目的修改date已更改为旧的date。

你需要检查你的引用,并确保它们引用你的dll的更新位置。

一个noob错误,但我有错误,当我的访问数据库是一个只读的用户名和密码。 希望我的错误能帮助别人。

我有一个类似的问题。 我已经有一个使用POCO类的数据库和一个我自己编写的Context对象的EDMX文件。 当我为另一个数据库添加第二个EDMX时,我使用了POCO T4模板,然后EDMX都没有工作,抛出了你提到的错误。 为了解决它,我放弃了我的自定义POCO和上下文,只使用了T4模板,所有工作都很好。

我有一个问题,我已经添加了一些列的表。

在表映射中,我重命名了列名。

尽pipe我已经运行了“Transform All Templates”并重build了应用程序,但我还是得到了“<>的相关元数据types包含以下未知属性或字段<>'的错误。

Domain.Poco.tt中这个表的类是正确的,但是我发现Domain.Poco.MetaData.tt中的相应的class.Metadata.cs文件没有更新,并且新的列有原来的名字 – 不是新的我在表格映射中指定的那些。

解? 我刚刚删除了违规的元数据类,并重新运行了“Transform All Templates”,并且正确地重新创build了正确的列/函数名称。

在我的情况下,这是同样的问题,映射不完全是预期的。 发生在我身上的是我从一个子类到基类中的一个“Table Per Hierarchy inheritance”属性,忘记了更新模型。

我有自定义的POCO,通过将edmx文件复制到一个空白的新项目,让它自动生成的实体,然后将它们与我帮助我找出差异。

我的问题是我编辑了T4模板来排除名为“msrepl_tran_version”的复制字段。 这导致数据库不匹配可能导致此错误消息的生成的类。 只要确保你的数据库和类匹配。