找不到概念模型类型

时间:2012-01-23 16:26:45

标签: asp.net-mvc-3 entity-framework entity-model

我在MVC3项目A和B中有两个实体数据模型。

我最近添加了新的实体数据模型B来处理一些新功能,问题是现在现有的代码已经停止工作,我在尝试访问实体模型A中的代码时遇到以下错误。

错误消息是:

  

无法找到概念模型类型'project.models.Bclass'

我不明白为什么这个新功能影响了当前代码,因为实体模型A没有任何改变。功能B属于单独的类,不会干扰模型A.

当从项目中删除新代码并排除实体模型B时,代码将按预期工作。

以下是错误中的一些堆栈跟踪:

Exception : Could not find the conceptual model type for 'Project1.Models.CrossSession'.
Application Class - method : System.Data.Metadata.Edm.MetadataWorkspace -- GetEdmSpaceType
User : temp.user
Url : http://localhost/project1/auth/message
Stacktrace :    at System.Data.Metadata.Edm.MetadataWorkspace.GetEdmSpaceType(StructuralType objectSpaceType)
   at System.Data.Entity.Internal.InternalContext.UpdateEntitySetMappings()
   at System.Data.Entity.Internal.InternalContext.TryUpdateEntitySetMappingsForType(Type entityType)
   at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
   at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()

8 个答案:

答案 0 :(得分:12)

找到解决方案。在某些情况下(随机),在entity framework生成的代码中会出现混乱。这显然是一个已知的错误,未来版本中应该会出现修复。与此同时,解决这个问题的方法是将efm移动到解决方案中的单独类中。

答案 1 :(得分:8)

通过将EntityFramework更新到最新版本(6.0)解决了这个问题 http://nuget.org/packages/EntityFramework/

安装后重新生成模型,它将起作用;)

答案 2 :(得分:8)

我在同一个项目中有两个不同的.edmx文件存在同样的问题。 对于我使用.edmx model的第一个"Add Code Generation Item",对于我没有使用的第二个模型。该项目正在构建,但在运行时抛出该异常。

我解决了为第二个.tt生成.edmx model类的问题。

答案 3 :(得分:7)

一种可能的解释是,如果您使用数据库第一种方法而忘记添加实体类,则会出现此错误。

即。 (摘自下面的指南)

  1. 右键单击模型的设计器表面。
  2. 从上下文菜单中,选择添加代码生成项。
  3. 在打开的“添加新项”对话框中,从左侧安装的模板类型列表中选择“数据”。
  4. 选择ADO.NET DbContext Generator,然后单击“添加” 按钮。
  5. 我通常使用Julie Lerman的指南; https://msdn.microsoft.com/en-us/library/jj206878(v=vs.113).aspx

答案 4 :(得分:2)

我刚刚安装了EF 4.1,并试图将DbContext与EMDX结合起来 - 当我试图传回一个视图时,我得到了同样的错误 - 那就是为什么我最终到了这里......我想是这样的这是将功能分离到解决方案中的单独组件中......

答案 5 :(得分:1)

这也可以通过在visual studio 2010中生成新的edmx来解决,以便它与旧的edmx相匹配......(并复制它生成的文件)

答案 6 :(得分:0)

使用Visual Studio 12,问题仍未解决。作为一种替代解决方法,我使用“老式”数据类来设置第二个SQL数据模型,这些数据类早于实体模型 - 它们仍然存在并且仍然有效。使用Add - New Item - (Data Category) - LINQ To SQL Classes,打开ServerExplorer,找到服务器和数据库,然后将其拖放到数据类窗格中。旧学校 - 但在不需要实体模型的全部功能时,可以方便地克服这个非常不方便的问题。

答案 7 :(得分:0)

我删除了edmx模型,删除了Entity包,重新安装了实体5.0并且正常工作。