19

我在 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()
4

9 回答 9

12

找到解决方案。在某些情况下(随机),由entity framework. 这显然是一个已知的错误,并且应该在未来的版本中进行修复。同时,解决此问题的方法是将 移至efm解决方案中的单独类。

于 2012-01-24T14:59:25.203 回答
9

一种可能的解释是,如果您使用数据库优先方法并忘记添加实体类,您将收到此错误。

即(来自下面链接的指南)

  1. 右键单击模型的设计器表面。
  2. 从上下文菜单中,选择添加代码生成项。
  3. 在打开的“添加新项目”对话框中,从左侧已安装模板类型列表中选择“数据”。
  4. 选择 ADO.NET DbContext Generator,然后单击 Add 按钮。

我通常使用 Julie Lerman 的指南;https://msdn.microsoft.com/en-us/library/jj206878(v=vs.113).aspx

于 2013-01-21T13:22:23.440 回答
8

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

安装后重新生成模型,它会工作;)

于 2012-12-06T09:32:37.797 回答
8

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

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

于 2013-02-07T15:50:13.130 回答
2

好吧,我刚刚安装了 EF 4.1 并尝试将 DbContext 与 EMDX 结合起来 - 当我尝试传回视图时,我得到了同样的错误 - 这就是我最终来到这里的原因......我认为解决这个问题的方法是将功能分开在解决方案中分成单独的组件...

于 2012-05-15T19:55:19.343 回答
1

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

于 2014-02-04T21:29:19.093 回答
0

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

于 2012-11-12T17:06:05.540 回答
0

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

于 2013-01-04T20:56:04.070 回答
0

我正在使用一些遗留软件,并不热衷于升级 EF。对我来说,我新添加的 .edmx 的以下设置需要更改以匹配项目中已经存在的 .edmx。我的新人说“T4”,我把它改成了“Legacy Object Context”。我确实必须删除之前生成的 .tt 模板才能构建它。否则,旧生成的文件会保留在那里,而新文件也在那里,从而导致“属性已定义”错误。感谢上面所有帮助我解决这个问题的答案!

(属性面板,点击实体设计器后) 属性中的代码生成策略

于 2021-12-09T20:11:40.733 回答