我在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()
答案 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)
一种可能的解释是,如果您使用数据库第一种方法而忘记添加实体类,则会出现此错误。
即。 (摘自下面的指南)
我通常使用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并且正常工作。